167

プログラムでアプリケーションをインストールしました。

  1. アプリケーションがすでにデバイスにインストールされている場合、アプリケーションは自動的に開きます。
  2. それ以外の場合は、特定のアプリケーションをインストールします。

教えて。何も思いつきません。ありがとう。

4

16 に答える 16

338

これを試してください:

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("SampleLog", "Application is already installed.");          
        } else {
            // Do whatever we want to do if application not installed
            // For example, Redirect to play store

            Log.i("SampleLog", "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;
    }

}
于 2012-07-09T09:25:20.230 に答える
72

受け入れられた回答よりもややクリーンなソリューション(この質問に基づく):

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

私はそれを静的ユーティリティとしてヘルパー クラスに入れることにしました。使用例:

boolean whatsappFound = AndroidUtils.isAppInstalled(context, "com.whatsapp");

この回答は、アプリが見つからない場合に Play ストアからアプリを取得する方法を示していますが、Play ストアがないデバイスでは注意が必要です。

于 2015-01-27T16:27:07.503 に答える
31

上記のコードは私にとってはうまくいきませんでした。次のアプローチが機能しました。

適切な情報で Intent オブジェクトを作成し、次の関数を使用して Intent が呼び出し可能かどうかを確認します。

private boolean isCallable(Intent intent) {  
        List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,   
        PackageManager.MATCH_DEFAULT_ONLY);  
        return list.size() > 0;  
}
于 2013-07-10T03:10:54.630 に答える
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;
    }
}
于 2016-05-20T21:40:46.690 に答える
5

kotlin を使用して、Android にアプリがインストールされているかどうかを確認します。

kotlin 拡張機能を作成しています。

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

これで、アプリがインストールされているかどうかを確認できます

if (packageManager.isAppInstalled("AppPackageName")) {
    // App is installed
}else{
    // App is not installed
}
于 2020-01-16T05:59:16.117 に答える
3

try/catch パターンを使用すると、パフォーマンスがあまり良くないと思います。これを使用することをお勧めします:

public static boolean appInstalledOrNot(Context context, String uri) {
    PackageManager pm = context.getPackageManager();
    List<PackageInfo> packageInfoList = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES);
    if (packageInfoList != null) {
        for (PackageInfo packageInfo : packageInfoList) {
            String packageName = packageInfo.packageName;
            if (packageName != null && packageName.equals(uri)) {
                return true;
            }
        }
    }
    return false;
}
于 2016-10-09T13:52:26.663 に答える
0

Android 11 アップデート
検索する正確なバンドル ID をマニフェストで指定する必要があります。

facebook と whatsapp の例:

「アプリケーション」の上のマニフェスト内 (権限がある場所)

<queries>
    <package android:name="com.whatsapp" />
    <package android:name="com.facebook.katana" />
</queries>  

これにより、facebook と whatsapp がインストールされているかどうかを確認できます。インストールされていない場合、そのチェックでは常に false になります。

この件に関する詳細な資料:
https://medium.com/androiddevelopers/package-visibility-in-android-11-cc857f221cd9

于 2022-01-26T21:47:35.857 に答える