Android 如何忽略用户使用全局共享意图设置的默认共享应用程序

Android 如何忽略用户使用全局共享意图设置的默认共享应用程序,android,android-intent,Android,Android Intent,我正在使用Global share intent来分享一些文本,如下所示: Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); intent.setAction(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_T

我正在使用Global share intent来分享一些文本,如下所示:

Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
        intent.setAction(Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.putExtra(Intent.EXTRA_TEXT, "Some Text");
        startActivity(intent);

问题是我想显示所有可与之共享文本的应用程序,即使用户已设置了默认应用程序,如下图所示

如何使用
ShareActionProvider

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/menu_item_share"
        app:showAsAction="ifRoom"
        android:title="Share"
        app:actionProviderClass="android.support.v7.widget.ShareActionProvider" />
    ...
</menu>

...

它不应该只要求
一次
和“始终”选项。您可以将此菜单添加到“菜单选项”或任何您想要的位置

如何使用
ShareActionProvider

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/menu_item_share"
        app:showAsAction="ifRoom"
        android:title="Share"
        app:actionProviderClass="android.support.v7.widget.ShareActionProvider" />
    ...
</menu>

...

它不应该只要求
一次
和“始终”选项。您可以将此菜单添加到“菜单选项”或任何您想要的位置

有一种方法可以使用
PackageManager
将自己从defailt活动中清除,但不能清除其他活动

因此,作为解决方法,您可以为此构建自己的UI。例如,输入通过这种方式获得的数据:

PackageManager manager = context.getPackageManager();
List<ResolveInfo> infos = manager.queryIntentActivities(intent, 0);
if (infos.size() > 0) {
   //do UI stuff
} else { 
    //No Application can handle your intent 
}  
PackageManager=context.getPackageManager();
List infos=manager.querytentActivities(intent,0);
如果(infos.size()>0){
//做用户界面的东西
}否则{
//没有应用程序可以处理您的意图
}  
它可以如下所示:


有一种方法可以使用
PackageManager
将自己从defailt活动中清除,但不能清除其他活动

因此,作为解决方法,您可以为此构建自己的UI。例如,输入通过这种方式获得的数据:

PackageManager manager = context.getPackageManager();
List<ResolveInfo> infos = manager.queryIntentActivities(intent, 0);
if (infos.size() > 0) {
   //do UI stuff
} else { 
    //No Application can handle your intent 
}  
PackageManager=context.getPackageManager();
List infos=manager.querytentActivities(intent,0);
如果(infos.size()>0){
//做用户界面的东西
}否则{
//没有应用程序可以处理您的意图
}  
它可以如下所示:


此处介绍了一个简单的解决方案:此处介绍了一个简单的解决方案: