2017-12-29 16 views
0

이미지의 LatLng를 변경하는 Android 프로그램을 설계하고 있습니다. 당신 만 InputStream을 가지고, 그것을 사용하고 그래서 지속의 방법이 없으므로 다음과 같이 이미지 열린 우리당이 배열의 코드가 있습니다Nougat의 URI를 통해 ExifInterface 객체를 사용하여 이미지의 LatLng을 변경할 수 없습니다.

발생

예외 "ExifInterface does not support saving attributes for the currrent input"

InputStream in = getContentResolver().openInputStream((Uri)AddArray[i]); 

    ExifInterface ei = new ExifInterface(in); 

    ei.setAttribute(TAG_GPS_LATITUDE, "80/1,35/1,4091/100"); 
    ei.setAttribute(TAG_GPS_LATITUDE_REF, "N"); 
    ei.setAttribute(TAG_GPS_LONGITUDE, "45/1,1/1,4390/100"); 
    ei.setAttribute(TAG_GPS_LONGITUDE_REF, "E"); 



    try { 
     ei.saveAttributes(); 
    } catch (Exception e) { 
     Toast.makeText(getApplicationContext(), e.getMessage().toString(), Toast.LENGTH_LONG).show(); 

    } 


} catch (IOException e) { 
    Toast.makeText(getApplicationContext(), "Something went wrong" + e.getMessage(), Toast.LENGTH_LONG).show(); 
} 

답변

0

ExifInterface을 말한다 당신의 변경.

에 당신이 필요로하는 것 :

  • 당신이 제어 일부 파일에 그 Uri에 의해 확인 된 콘텐츠의 복사본을 만들기 위해 InputStream를 사용하여 (예를 들어 getCacheDir()에,)와

  • 사용 ExifInterface을 해당 파일의 변경 사항을 저장하는 해당 파일

  • openOutputStream()ContentResolver으로 사용하면일부에 그 URI가 식별하는 콘텐츠의 복사본을 만들 사용되는 InputStream 다음 Uri에 의해 확인 된 내용에 10, 다음 U이 줄을 자세히 설명해 수 OutputStream

+0

에 파일의 바이트를 복사 당신이 제어하는 ​​파일 (예 : getCacheDir()) –

+0

@AbdullahMufti :'InputStream'은'java.io'의 일부입니다. 일부 소스 (파일, HTTP 응답 등)의 데이터를 읽는 데 사용합니다. 당신은 당신이 제어하는 ​​어떤 파일에'FileOutputStream'을 생성하고, 표준 자바 I/O를 사용하여'InputStream'에서'FileOutputStream'으로 바이트를 복사 할 수 있습니다. 작업이 끝나면 'Uri'가 가리키는 것과 같은 데이터를 포함하는 파일이 생성됩니다. 이제, 당신은 그 파일과 함께'ExifInterface'를 사용할 수 있고,'ExifInterface'는 파일에 저장할 수 있습니다. – CommonsWare

+0

하나의 마지막 호의 : 내 코드에서 실수를 식별 할 수 있습니까? InputStream = getContentResolver(). openInputStream ((Uri) AddArray [i]); 파일 myFile = getCacheDir(); 파일 outFile = 새 파일 (myFile, String.valueOf (입력)); OutputStream os = 새 FileOutputStream (outFile.getAbsolutePath()); –