2016-12-03 5 views
0

こんにちはevrybody私はメッセンジャーで画像を共有しようとしていますが、私のコードがうまくいかない理由はわかりません、私は公式ガイドに従っていますhttps://developers.facebook.com/docs/messenger/android 誰かどうしていいの?Android、画像ファイルをメッセンジャーと共有する方法

public void sendMessage(){ 
    Bitmap adv= takePic(HomeActivity.livelloCurrent.getNumeroLivello()); 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    adv.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
    File f = new File(Environment.getExternalStorageDirectory()+ File.separator + "temporary_file.jpg"); 
    try { 
     f.createNewFile(); 
     new FileOutputStream(f).write(bytes.toByteArray()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    String mimeType = "image/jpeg"; 
    Intent sendIntent = new Intent(); 
    sendIntent.setType(mimeType); 
    sendIntent.setAction(Intent.ACTION_SEND); 
    sendIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse(Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg")); 
    sendIntent.putExtra(Intent.EXTRA_TEXT, "<---MY TEXT--->."); 
    sendIntent.setPackage("com.facebook.orca"); 
    try { 
     startActivity(sendIntent); 
    } 
    catch (android.content.ActivityNotFoundException ex) { 
     Toast.makeText(getApplicationContext(),"Please Install Facebook Messenger", Toast.LENGTH_LONG).show(); 
    } 
    /** //withSDK-->// ShareToMessengerParams shareToMessengerParams = ShareToMessengerParams.newBuilder(ContentUri, mimeType).build(); 
    MessengerUtils.shareToMessenger(this, REQUEST_CODE_SHARE_TO_MESSENGER, shareToMessengerParams);**/ 
} 

確かに私はそれをテストしました。テストでは、私はメッセンジャーから次のエラーを受け取ります。「申し訳ありませんが、メッセンジャーはファイルを処理できませんでした。 どうすれば解決できますか?

+0

コール 'フラッシュ()'、 'getFD()同期()'と ''後FileOutputStream'上 ')(近接しています。 'write()'いつもあなたの 'targetSdkVersion'を24以上に設定すると、' fromFile() 'はAndroid 7.0以降のデバイスでは動作しないので、' Uri.fromFile() 'の代わりに' FileProvider'を使用します。すべてのアプリが同じ 'ACTION_SEND'' Intent'に対して 'EXTRA_TEXT'と' EXTRA_STREAM'の両方をサポートするわけではないことに注意してください。そして、 'setPackage()'を取り除くことができますので、[あなたが望む場所を共有する]ことができます(https://commonsware.com/blog/2011/06/28/share-where-the-user-wants.html)。 – CommonsWare

+0

write()の後に 'FileOutputStream'で' flush() '、' getFD()。sync() '、' close() 'と呼ばれていますが、まだ動作していないので、' EXTRA_TEXT' – Rachid

答えて

0

置き換えます

Uri.parse(Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg") 

で:

Uri.fromFile(f) 
+0

ログコンソールでこの致命的な例外が発生しました android.os.FileUriExposedException:file:///storage/emulated/0/temporary_file.jpg ClipData.Item.getUri()によってアプリケーションを超えて公開されました。 – Rachid

+0

@Rachid:そうです私が最初のコメントで述べた問題。 Android 7.0以降では、 'targetSdkVersion'が24以上の' Uri.fromFile() 'は使用できません。 1つのオプションは 'build.gradle'ファイルに入り、' targetSdkVersion'を23に下げることです。別のオプションは 'FileProvider'を使うためにこれをすべて修正することです。 'Uri.fromFile()'から取得した 'Uri'です。 – CommonsWare

+0

ありがとうsoo多くの私の問題を解決:) :) FileProvider – Rachid

関連する問題