2015-05-27 78 views
1

我的代碼如下 -無法分享使用ACTION_SEND意圖圖像微信和Line

Intent prototype = new Intent(Intent.ACTION_SEND); 
prototype.setData(uri); // uri is of the image file 
prototype.setType(image/*); 
prototype.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

prototype.putExtra(Intent.EXTRA_STREAM, uri); 

List<ResolveInfo> resInfo = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 
     if (!resInfo.isEmpty()) 
     { 
      for (ResolveInfo resolveInfo : resInfo) 
      { 
       if (resolveInfo.activityInfo == null) 
       { 
        continue; 
       } 

       // Retrieve the package name and class name to populate the chooser intent 
       Intent intent = (Intent) prototype.clone(); 
       String packageName = resolveInfo.activityInfo.packageName; 
       intent.setPackage(packageName); 
       intent.setClassName(packageName, resolveInfo.activityInfo.name); 
      targetedIntents.add(intent); 
     }} 
      Intent chooserIntent = Intent.createChooser(topIntents.remove(targetedIntents.size() - 1), chooserTitle); 
       chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toArray(new Parcelable[] {})); 

當我從選擇器中選擇微信和在線應用程序,沒有任何反應。線路應用程序只顯示一個無法共享的錯誤。微信不提供任何消息。使用我的代碼在WhatsApp和環聊中共享可以很好地工作。

我們可以在圖庫上分享微信和線上的圖片。這是如何運作的?這不是發送動作意圖嗎?我有同樣的問題

+0

「我的代碼如下」 - 不,它不是,因爲代碼不會編譯。 「這是如何運作的?」 - 「ACTION_SEND」。你的'Uri'是什麼?既然你正在使用'FLAG_GRANT_READ_URI_PERMISSION',你使用'FileProvider'還是實現你自己的流'ContentProvider'? – CommonsWare

+0

嗨@CommonsWare,我正在實現我自己的內容提供者。由於我的代碼是專有的,我無法完整發布它。 Uri的形式爲:// ...,圖像存儲在我的應用程序目錄中。奇怪的部分是我的代碼在環聊,Whatsapp,FB Messenger上運行,但微信和線路無法使用。我在我的代碼中也使用了ACTION_SEND意圖,但是共享不起作用的原因是什麼,而它對於圖庫起作用。 – user1154309

+0

你可以嘗試在你的ContentProvider的'query()'方法中混合[my'LegacyCompatCursorWrapper'](https://github.com/commonsguy/cwac-provider#usage-legacycompatcursorwrapper),或者嘗試實現[這個模式](http://stackoverflow.com/a/25020642/115145)用於處理一些寫得不好的流式ContentProvider客戶端。 – CommonsWare

回答

0

所以我實現以下內容:

shareIntent.setAction(Intent.ACTION_SEND); 
shareIntent.putExtra(Intent.EXTRA_SUBJECT,sharesubject); 
shareIntent.putExtra(Intent.EXTRA_TEXT, sharetext); 
shareIntent.setType("image/jpeg"); 
shareIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(destination)); 
shareIntent.setPackage(info.activityInfo.packageName); 

//目的地是被共享包含圖像的文件的名稱。

注意:這隻適用於api 23及以下版本。