即使已经选择了默认应用程序,如何显示默认应用程序选择器对话框?

努贝拉

假设我有一个浏览器应用程序,

而且,即使当前的默认浏览器不是我的应用程序,我也希望将其设置为“设为默认浏览器”以显示对话框选择器。

如何使我以编程方式显示应用选择器对话框?

谢谢。

更新根据Michal的回答,我写了这样的代码:

String url = FinalVariables.JAVELIN_URL;
Intent i = new Intent(Intent.ACTION_VIEW);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse(url));
startActivity(Intent.createChooser(i, getString(R.string.choose_javelin)));

虽然确实显示选择器对话框,但不显示“始终”,“仅一次”选项。如何显示该选项?

谢谢!

德鲁

有一个肮脏的漂亮黑客,可以让您做到这一点。这种黑客的灵感可以在这里找到

这个主意

是为了让android认为刚安装了新的浏览器,并使用典型的浏览器意图过滤器为其提供了虚假的组件。我将提供一些测试用例作为概念证明,这取决于您来决定如何在实际应用程序中使用它。

拟议的方法

在很多情况下似乎是通用且适用的(不仅适用于启动器和浏览器),并且仅取决于馈送到解析器的意图过滤器。

假设我们要覆盖默认的Activity以浏览简单的http://链接,我们将在AndroidManifest.xml中与真实的活动一起声明一个虚假的浏览器活动

<activity
    android:name=".FakeActivity"
    android:enabled="false">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:scheme="http" />
        </intent-filter>
</activity>

FakeActivity绝对是空白的:

public class FakeActivity extends Activity {}

我们将通过按下activity_main.xml中的一个简单按钮来显示应用选择器,并通过按下另一个按钮来测试默认行为:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    View changeDefaultButton = findViewById(R.id.changeDefButton);
    changeDefaultButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showChooser();
        }
    });

    View testDefaultButton = findViewById(R.id.testDefaultButton);
    testDefaultButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            runDefaultApp();
        }
    });
}


void showChooser(){

    PackageManager pm = getPackageManager();
    ComponentName cm = new ComponentName(this, FakeActivity.class);
    pm.setComponentEnabledSetting(cm, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

    runDefaultApp();

    pm.setComponentEnabledSetting(cm, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

}

void runDefaultApp(){
    Intent selector = new Intent(Intent.ACTION_VIEW);
    selector.setData(Uri.parse("http://stackoverflow.com"));
    startActivity(selector);
}

每次单击changeDefaultButton,都会显示选择器对话框(假设至少安装了两个合适的浏览器应用程序)。此外,选择器对话框始终允许用户将所选应用程序设置为default

链接:

GitHub概念验证项目

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

应用程序崩溃,而不是弹出“日期选择器”对话框

来自分类Dev

在“选择应用程序”对话框列表中显示应用程序

来自分类Dev

Android默认付款应用程序对话框缺少应用程序图标

来自分类Dev

我的应用程序不会显示在MIME类型为video / *的android.intent.action.VIEW的选择器对话框中,仅在棉花糖上

来自分类Dev

如何使所有应用程序使用Nemo的文件选择对话框而不是Nautilus?

来自分类Dev

如何在Windows窗体应用程序中使用“广告”对话框“选择用户或组”?

来自分类Dev

当 WhatsApp 不是邮件应用程序时,为什么 Intent.EXTRA_EMAIL 会导致在选择器对话框中选择 WhatsApp?

来自分类Dev

点击按钮时如何显示“应用程序启动器”对话框

来自分类Dev

以编程方式启动默认的Android启动器并显示应用程序选择屏幕

来自分类Dev

Android-从更改默认SMS应用程序对话框获取结果

来自分类Dev

如何让C#Windows应用程序从选择的默认组合框项目开始?

来自分类Dev

如何选择我的浏览器应用程序作为我的默认浏览器?

来自分类Dev

如何使我的应用程序出现在应用程序选择器中?

来自分类Dev

在首次启动应用程序时显示对话框

来自分类Dev

在我的启动器应用程序中显示当前正在运行的应用程序的对话框

来自分类Dev

从菜单中选择帮助(警告对话框)选项时,应用程序停止工作

来自分类Dev

如何从终端打开“运行应用程序”对话框?

来自分类Dev

Facebook显示登录对话框而不是应用程序请求对话框

来自分类Dev

在angularjs应用程序中默认选择单选按钮

来自分类Dev

如何通过Sitecore SPEAK应用程序中的对话框选择项目?

来自分类Dev

如何在C ++中从控制台应用程序显示MFC对话框?

来自分类Dev

如何在应用程序android中的任何活动之上显示警报对话框

来自分类Dev

如何在无需打开应用程序的情况下显示对话框

来自分类Dev

如何显示特定应用程序的“强制停止”对话框

来自分类Dev

如何在C ++中从控制台应用程序显示MFC对话框?

来自分类Dev

如何在应用程序android中的任何活动之上显示警报对话框

来自分类Dev

FLUTTER:如何在应用程序开始之前显示对话框?

来自分类Dev

在应用选择器对话框中显示应用名称

来自分类Dev

在应用选择器对话框中显示应用名称

Related 相关文章

  1. 1

    应用程序崩溃,而不是弹出“日期选择器”对话框

  2. 2

    在“选择应用程序”对话框列表中显示应用程序

  3. 3

    Android默认付款应用程序对话框缺少应用程序图标

  4. 4

    我的应用程序不会显示在MIME类型为video / *的android.intent.action.VIEW的选择器对话框中,仅在棉花糖上

  5. 5

    如何使所有应用程序使用Nemo的文件选择对话框而不是Nautilus?

  6. 6

    如何在Windows窗体应用程序中使用“广告”对话框“选择用户或组”?

  7. 7

    当 WhatsApp 不是邮件应用程序时,为什么 Intent.EXTRA_EMAIL 会导致在选择器对话框中选择 WhatsApp?

  8. 8

    点击按钮时如何显示“应用程序启动器”对话框

  9. 9

    以编程方式启动默认的Android启动器并显示应用程序选择屏幕

  10. 10

    Android-从更改默认SMS应用程序对话框获取结果

  11. 11

    如何让C#Windows应用程序从选择的默认组合框项目开始?

  12. 12

    如何选择我的浏览器应用程序作为我的默认浏览器?

  13. 13

    如何使我的应用程序出现在应用程序选择器中?

  14. 14

    在首次启动应用程序时显示对话框

  15. 15

    在我的启动器应用程序中显示当前正在运行的应用程序的对话框

  16. 16

    从菜单中选择帮助(警告对话框)选项时,应用程序停止工作

  17. 17

    如何从终端打开“运行应用程序”对话框?

  18. 18

    Facebook显示登录对话框而不是应用程序请求对话框

  19. 19

    在angularjs应用程序中默认选择单选按钮

  20. 20

    如何通过Sitecore SPEAK应用程序中的对话框选择项目?

  21. 21

    如何在C ++中从控制台应用程序显示MFC对话框?

  22. 22

    如何在应用程序android中的任何活动之上显示警报对话框

  23. 23

    如何在无需打开应用程序的情况下显示对话框

  24. 24

    如何显示特定应用程序的“强制停止”对话框

  25. 25

    如何在C ++中从控制台应用程序显示MFC对话框?

  26. 26

    如何在应用程序android中的任何活动之上显示警报对话框

  27. 27

    FLUTTER:如何在应用程序开始之前显示对话框?

  28. 28

    在应用选择器对话框中显示应用名称

  29. 29

    在应用选择器对话框中显示应用名称

热门标签

归档