2017-02-28 36 views
0

我想使用directshare功能,但我需要排除應用程序。是否可以排除應用程序和directshare?

的排除部分工作得很好,我在這裏只給意圖來選擇器的陣列,而意圖只包括一個特定的應用程序。

但這樣做directshare不起作用。

Directshare似乎只能在授課的時候只有一個意圖選擇器是工作。

是否可以排除應用程序和使用directshare?

代碼段:

與(How to filter specific apps for ACTION_SEND intent (and set a different text for each app))意圖的列表共享:

final Intent chooserIntent = Intent.createChooser(targetShareIntents.remove(0), "Share with: "); 
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetShareIntents.toArray(new Parcelable[]{})); 
activity.startActivity(chooserIntent); 

與directshare共享,但沒有排除:

final Intent sendIntent = new Intent(); 
sendIntent.setAction(Intent.ACTION_SEND); 
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); 
sendIntent.setType("text/plain"); 
activity.startActivity(Intent.createChooser(sendIntent, "Share with:")); 

回答

1

我碰到了同樣的問題直接分享,並發現它似乎只適用於傳遞給createChooser()的目標意圖。

我的kludgy解決方法是查找"com.android.mms"並將該意圖傳遞給createChooser()以及targetedShareIntents數組中的其他人,這意味着至少DirectShare適用於文本消息。

注意的一些應用程序,而不是在targetedShareIntents設置類名字的意思是你結束了Android系統的出現在選配代替。

對我來說,這個解決方案還不夠好,而我傾向於不從列表中排除自己的應用程序。希望我的努力會讓某人更好。下面

代碼是在這裏找到的例子的變化: Custom filtering of intent chooser based on installed Android package name

我在這裏看到:那個saulpower可能有更好的解決方案http://stackoverflow.com/a/23036439,但我不能把它與我的UI工作。

private void shareExludingApp(Intent intent, String packageNameToExclude, String title) { 
    List<Intent> targetedShareIntents = new ArrayList<Intent>(); 
    List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(intent, 0); 
    Intent directShare = null; 
    if (!resInfo.isEmpty()) { 
     for (ResolveInfo info : resInfo) { 
      Intent targetedShare = new Intent(intent); 
      if (!info.activityInfo.packageName.startsWith(packageNameToExclude)) { 
       targetedShare.setPackage(info.activityInfo.packageName); 
       targetedShare.setClassName(info.activityInfo.packageName, 
         info.activityInfo.name); 
       if (directShare == null && info.activityInfo.packageName.equals("com.android.mms")) { 
        directShare = targetedShare; 
       } else { 
        targetedShareIntents.add(targetedShare); 
       } 
      } 
     } 
    } 
    if (targetedShareIntents.size() > 0) { 
     if (directShare == null) { 
      directShare = targetedShareIntents.remove(0); 
     } 
     Intent chooserIntent = Intent.createChooser(directShare, title); 
     chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, 
       targetedShareIntents.toArray(new Parcelable[] {})); 
     startActivity(chooserIntent); 
    } 
    else { 
     startActivity(Intent.createChooser(intent, title)); 
    } 
} 

用法:

shareExludingApp(intent, getPackageName(), "Share via"); 
相關問題