2016-12-03 1 views
0

안녕하세요 evrybody 나는 메신저에서 이미지를 공유하려고 노력하고 있지만 내 코드가 작동하지 않는 이유를 모르겠다. 공식 가이드를 따라 갔다. https://developers.facebook.com/docs/messenger/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 이상으로 설정하면 안드로이드 7.0 이상의 장치에서 fromFile()이 작동하지 않기 때문에'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 : That is 내가 처음 언급 한 문제. 'targetSdkVersion'가 24 이상인 Android 7.0+에서는'Uri.fromFile()'을 사용할 수 없습니다. 하나의 옵션은'build.gradle' 파일에 들어가서'targetSdkVersion'을 23으로 낮추는 것입니다. 또 다른 옵션은'FileProvider'를 사용하기 위해이 모든 것을 재 작업하는 것입니다. 그래서 당신은 파일을 전달하려고하는 대신 그것을 사용합니다 'Uri.fromFile()'에서 가져 오는'Uri'. – CommonsWare

+0

Thankyou soo가 내 문제를 해결했습니다 :) :) FileProvider를 사용하여 – Rachid

관련 문제