如何制作一个可定制的按钮来启动应用程序?

发布于 2024-11-08 14:48:46 字数 502 浏览 5 评论 0原文

我正在尝试向我的应用程序添加一个按钮。单击时,我想启动一个选择对话框,显示所有快捷方式或已安装​​的应用程序。选择一个应该永久设置启动该应用程序的按钮。

我了解如何使用 packagemanager 获取已安装应用程序的列表:

PackageManager pm = getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

但是我真的需要接受它并使用 ListAdapter 并从头开始创建一个单独的对话框吗?

我觉得我在其他应用程序中多次看到过这个选择菜单(例如当您添加快捷方式时的任何启动器应用程序,或者当您添加新快捷方式时在 Google 的 Car Home 应用程序中)。没有通用的方法来使用这个快捷选择菜单吗?

我已经搜索了所有这些论坛,但找不到其他的。任何帮助将不胜感激。谢谢。

I am trying to add a button to my application. When clicked I would like to launch a selection dialog that shows all shortcuts or installed applications. Choosing one should permanently set the button to launch that application.

I understand how to use packagemanager to get a list of installed applications:

PackageManager pm = getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

but do I really need to take this and use a ListAdapter and create a seperate dialog from scratch?

I feel like I've seen this selection menu in other apps multiple times (such as any launcher app when you go to add a shortcut, or in Google's Car Home app when you add a new shortcut). Is there no stock way to use this shortcut selection menu?

I've searched these forums all over and can't find otherwise. Any help will be much appreciated. Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冷弦 2024-11-15 14:48:46

但是我真的需要接受这个并使用 ListAdapter 并从头开始创建一个单独的对话框吗?

对于选择应用程序,是的。

没有通用的方法来使用此快捷选择菜单吗?

该“快捷选择菜单”并不是选择应用程序。它正在选择一个活动,可能使用 ACTION_PICK_ACTIVITY

but do I really need to take this and use a ListAdapter and create a seperate dialog from scratch?

For picking an application, yes.

Is there no stock way to use this shortcut selection menu?

That "shortcut selection menu" is not picking an application. It is picking an activity, probably using ACTION_PICK_ACTIVITY.

嗫嚅 2024-11-15 14:48:46

对于那些感兴趣的人,我最终是如何完成它的:

当您创建 Intent mainIntent(在下面的代码中)并使用 ACTION_MAIN 和 addCategory CATEGORY_LAUNCHER 时,您可以将其添加为 pickIntent 的 EXTRA。这样做可以缩小选择器菜单的范围,仅显示已安装的应用程序。

下面是一些让简单的启动器按钮运行的代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //rename R.id.plusbutton to match up with your button in xml
    Button plusButton = (Button)findViewById(R.id.plusbutton);

    plusButton.setOnClickListener(new View.OnClickListener() {          

    @Override
    public void onClick(View view) {
        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);            
        Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
        pickIntent.putExtra(Intent.EXTRA_INTENT, mainIntent);   
        int requestCode = 1;
        //rename Main to your class or activity
        Main.this.startActivityForResult(pickIntent, requestCode);
        }
    });
}

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (intent != null)
        startActivity(intent);
}

For those interested, here is how I eventually accomplished it:

When you create the Intent mainIntent (in the code below) and use ACTION_MAIN and addCategory CATEGORY_LAUNCHER, you can add it as an EXTRA for pickIntent. Doing this narrows down the picker menu to show only installed applications.

Here is some code to get a simple launcher button going:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //rename R.id.plusbutton to match up with your button in xml
    Button plusButton = (Button)findViewById(R.id.plusbutton);

    plusButton.setOnClickListener(new View.OnClickListener() {          

    @Override
    public void onClick(View view) {
        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);            
        Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
        pickIntent.putExtra(Intent.EXTRA_INTENT, mainIntent);   
        int requestCode = 1;
        //rename Main to your class or activity
        Main.this.startActivityForResult(pickIntent, requestCode);
        }
    });
}

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (intent != null)
        startActivity(intent);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文