プログラムでアプリケーションをインストールしました。
- アプリケーションがすでにデバイスにインストールされている場合、アプリケーションは自動的に開きます。
- それ以外の場合は、特定のアプリケーションをインストールします。
教えて。何も思いつきません。ありがとう。
これを試してください:
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;
}
}
受け入れられた回答よりもややクリーンなソリューション(この質問に基づく):
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 ストアがないデバイスでは注意が必要です。
上記のコードは私にとってはうまくいきませんでした。次のアプローチが機能しました。
適切な情報で Intent オブジェクトを作成し、次の関数を使用して Intent が呼び出し可能かどうかを確認します。
private boolean isCallable(Intent intent) {
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
このコードは、アプリがインストールされていることを確認するだけでなく、アプリが有効になっていることも確認します。
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;
}
}
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
}
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;
}
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