0

我正在尝试制作一个在插入耳机时自动启动您选择的音乐播放器的应用程序。为此,当用户插入耳机时,我想要一个意图显示他们手机上的所有应用程序,以便他们可以点击有默认的音乐播放器,如 rhapsody、spotify 等。因为每个人都有不同的音乐应用程序。我不能使用意图来仅启动包名称,因为它可能对每个人都不相同。是否有显示所有应用程序的意图,以便用户可以选择他们的默认应用程序。谢谢。

我想的另一种方法是在手机的列表视图中搜索特定的第三方应用程序,然后将其设置为默认值。

我正在尝试使用的代码,代码需要在 case1 中工作

private class MusicIntentReceiver extends BroadcastReceiver {
    @Override public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
            int state = intent.getIntExtra("state", -1);
            switch (state) {
                case 0:
                    Log.d(TAG, "Headset is unplugged");
                    break;
                case 1:
                    final PackageManager pm = getPackageManager();
                    List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
                    for (ApplicationInfo packageInfo : packages) {
                        Log.d(TAG, "Installed package :" + packageInfo.packageName);
                        Log.d(TAG, "Source dir : " + packageInfo.sourceDir);
                        Log.d(TAG, "Launch Activity :" + pm.getLaunchIntentForPackage(packageInfo.packageName));
                    }
                    break;
                default:
                    Log.d(TAG, "I have no idea what the headset state is");
            }
        }
    }
}
4

1 回答 1

0

您可以查询系统

public static boolean isSupportedIntent(@NonNull final Intent intent, @NonNull @ApplicationContext final Context applicationContext) {
    Preconditions.checkNotNull(intent);
    Preconditions.checkNotNull(applicationContext);
    //
    final List<ResolveInfo> list = applicationContext.getPackageManager().queryIntentActivities(intent,
            PackageManager.MATCH_DEFAULT_ONLY);
    return !list.isEmpty();
}

因此,您可以返回 ResolveInfo 以获取更多信息,而不是在那里返回布尔值

于 2014-10-12T15:59:22.177 回答