2017-12-29 13 views
0

画像のLatLngを変更するためのアンドロイドプログラムを設計しています。画像ウリは、あなたがそれを使用しているとして、唯一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に設定すると、によって識別されるコンテンツの10、そのOutputStream

+0

へのファイルのバイトをコピーuは、この行を詳しく説明してくださいすることができます はいくつかにそのURIによって識別されるコンテンツのコピーを作成するためのInputStreamを使用(例えば、getCacheDir()で) –

+0

@AbdullahMufti: 'InputStream'は' java.io'の一部です。何らかのソース(ファイル、HTTPレスポンスなど)からデータを読み込むために使用します。あなたがコントロールするいくつかのファイルで 'FileOutputStream'を作成し、標準のJava I/Oを使ってバイトを' InputStream'から 'FileOutputStream'にコピーすることができます。あなたが終わったら、あなたは 'Uri'が指しているものと同じデータを含むファイルを持っています。これで、そのファイルで 'ExifInterface'を使うことができ、' ExifInterface'でファイルに保存することができます。 – CommonsWare

+0

1つの最後の恩恵:私のコードで間違いを特定できますか? InputStream = getContentResolver()。openInputStream((Uri)AddArray [i]); ファイルmyFile = getCacheDir(); ファイルoutFile =新しいファイル(myFile、String.valueOf(in)); OutputStream os = new FileOutputStream(outFile.getAbsolutePath()); –

関連する問題