如何以编程方式检查Android中是否安装了应用程序?

Sat*_*ish 142 android apk

我们以编程方式安装了应用程序

  1. 如果应用程序已安装在设备中,则应用程序将自动打开.
  2. 否则安装特定的应用程序.

引导我.我不知道.谢谢.

Aer*_*row 308

试试这个:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Add respective layout
        setContentView(R.layout.main_activity);

        // Use package name which we want to check
        boolean isAppInstalled = appInstalledOrNot("com.check.application");  

        if(isAppInstalled) {
            //This intent will help you to launch if the package is already installed
            Intent LaunchIntent = getPackageManager()
                .getLaunchIntentForPackage("com.check.application");
            startActivity(LaunchIntent);

            Log.i("Application is already installed.");       
        } else {
            // Do whatever we want to do if application not installed
            // For example, Redirect to play store

            Log.i("Application is not currently installed.");
        }
    }

    private boolean appInstalledOrNot(String uri) {
        PackageManager pm = getPackageManager();
        try {
            pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
        }

        return false;
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 毫无疑问,你的帖子真的很有帮助,但我收到一个异常“java.lang.RuntimeException:添加窗口失败”和“E/AndroidRuntime(7554):由:android.os.TransactionTooLargeException 05-14 11:37:25.305 : E/AndroidRuntime(7554): at android.os.BinderProxy.transact(Native Method) 05-14 11:37:25.305: E/AndroidRuntime(7554): at android.view.IWindowSession$Stub$Proxy.add(IWindowSession) .java:516) 05-14 11:37:25.305: E/AndroidRuntime(7554): 在 android.view.ViewRootImpl.setView(ViewRootImpl.java:494)" (2认同)
  • @BlueGreen:嗨,希望这个链接可以帮到你,http://stackoverflow.com/questions/11451393/what-to-do-on-transactiontoolargeexception,否则如果你使用Dialog Class就意味着请检查一下.:) (2认同)

Jon*_*nik 62

比接受的答案更清晰的解决方案(基于这个问题):

public static boolean isAppInstalled(Context context, String packageName) {
    try {
        context.getPackageManager().getApplicationInfo(packageName, 0);
        return true;
    }
    catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

我选择将它作为静态实用程序放在辅助类中.用法示例:

boolean whatsappFound = AndroidUtils.isAppInstalled(context, "com.whatsapp");
Run Code Online (Sandbox Code Playgroud)

此答案显示了如果缺少应用程序,如何从Play商店获取应用程序,但需要在没有Play商店的设备上进行操作.

  • 这是否需要任何特定的 Android 权限才能工作? (2认同)

Pri*_*sai 25

上面的代码对我不起作用.以下方法有效.

使用适当的信息创建一个Intent对象,然后使用以下函数检查Intent是否可调用:

private boolean isCallable(Intent intent) {  
        List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,   
        PackageManager.MATCH_DEFAULT_ONLY);  
        return list.size() > 0;  
}
Run Code Online (Sandbox Code Playgroud)

  • 这样更好,因为它不需要使用流控制的异常! (5认同)
  • @HenriquedeSousa `意图意图 = getPackageManager().getLaunchIntentForPackage("org.package.name");` (3认同)
  • @QED令人震惊的是使用Exceptions作为`if`语句的人数!这绝对是正确的答案 (2认同)

Kav*_*avi 15

如果您知道包名称,那么这可以在不使用try-catch块或迭代一堆包的情况下工作:

public static boolean isPackageInstalled(Context context, String packageName) {
    final PackageManager packageManager = context.getPackageManager();
    Intent intent = packageManager.getLaunchIntentForPackage(packageName);
    if (intent == null) {
        return false;
    }
    List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
    return !list.isEmpty();
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*kov 14

Android 11 更新
您必须在清单中指定要搜索的确切捆绑包 ID。

Facebook 和 Whatsapp 的示例:

在“应用程序”上方的清单内(权限所在的位置)

<queries>
    <package android:name="com.whatsapp" />
    <package android:name="com.facebook.katana" />
</queries>  
Run Code Online (Sandbox Code Playgroud)

这将允许您检查 Facebook 和 Whatsapp 是否已安装,否则您的检查结果总是错误的。

有关该主题的进一步阅读:
https://medium.com/androiddevelopers/package-visibility-in-android-11-cc857f221cd9


you*_*joe 7

此代码检查以确保安装了应用程序,但也检查以确保它已启用.

private boolean isAppInstalled(String packageName) {
    PackageManager pm = getPackageManager();
    try {
        pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
        return pm.getApplicationInfo(packageName, 0).enabled;
    }
    catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)


Nir*_*iya 5

使用 kotlin 检查 Android 中是否安装了应用程序。

创建 kotlin 扩展。

fun PackageManager.isAppInstalled(packageName: String): Boolean = try {
        getApplicationInfo(packageName, PackageManager.GET_META_DATA)
        true
    } catch (e: Exception) {
        false
    }
Run Code Online (Sandbox Code Playgroud)

现在,可以检查应用程序是否安装

if (packageManager.isAppInstalled("AppPackageName")) {
    // App is installed
}else{
    // App is not installed
}
Run Code Online (Sandbox Code Playgroud)