查看包是否存在于getLaunchIntentForPackage之前

时间:2015-10-05 20:58:33

标签: android

我正在制作一个特殊的启动器:此启动器会在平板电脑中显示一些确定的应用程序。

例如(数独):

button_sudoku.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent();
            PackageManager manager = getPackageManager();
            i = manager.getLaunchIntentForPackage("com.coolandroidappzfree.freesudoku");
            i.addCategory(Intent.CATEGORY_LAUNCHER);
            startActivity(i);
        }
    });

但想象一下,如果应用程序com.coolandroidappzfree.freesudoku不在平板电脑上?所以app崩溃了!

我想先验证应用是否在平板电脑上,点击后,如果没有,请安装应用。

有可能吗?

由于

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。 如果安装在设备中,此功能将启动appPackageName,否则启动PlayStore:

public static boolean launchPackage(Context context, String appPackageName){

        List<ApplicationInfo> packages;
        PackageManager pm;

        pm = context.getPackageManager();
        packages = pm.getInstalledApplications(0);
        for (ApplicationInfo packageInfo : packages)
        {
            if(packageInfo.packageName.equals(appPackageName))
            {
                Intent i = new Intent();
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                PackageManager manager = context.getPackageManager();
                i = manager.getLaunchIntentForPackage(appPackageName);
                i.addCategory(Intent.CATEGORY_LAUNCHER);
                context.startActivity(i);
                return true;
            }
        }

        Intent i2 = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName));
        i2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i2);

        return false;
    }