启动没有包名的第三方应用

时间:2014-10-12 15:50:52

标签: android android-intent headphones

我正在尝试制作一款能够在插入耳机时自动启动您选择的音乐播放器的应用程序。为此,当用户插入耳机时,我希望有意在手机上显示所有应用程序,他们可以点击默认音乐播放器,如狂想曲,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");
            }
        }
    }
}

1 个答案:

答案 0 :(得分: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以获取更多信息

,而不是返回布尔值