[解決済み] アプリケーションがインストールされているか確認する - Android
質問
Google Playからアプリをインストールしようとしています。Google Play ストアの URL を開くと、Google Play が開かれ、戻るボタンを押すとアクティビティが再開されることは理解できるのですが。
Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(appURL));
marketIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
startActivity(marketIntent);
アクティビティに戻ると、このように呼び出してみました。
onResume()
を呼び出して、アプリがインストールされているかどうかを確認しようとしましたが、エラーが発生します。
@Override
protected void onResume() {
super.onResume();
boolean installed = false;
while (!installed) {
installed = appInstalledOrNot(APPPACKAGE);
if (installed) {
Toast.makeText(this, "App installed", Toast.LENGTH_SHORT).show();
}
}
}
private boolean appInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
boolean app_installed = false;
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
app_installed = true;
}
catch (PackageManager.NameNotFoundException e) {
app_installed = false;
}
return app_installed ;
}
エラーは以下の通りです。
E/AndroidRuntime(796): java.lang.RuntimeException: Unable to start アクティビティ ComponentInfo{com.example.appinstaller/com.example.appinstaller.MainActivity}: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=market://details?id=com.package.name flg=0x40080000 }.
というアクティビティだと思います。
onPause()
. もっと良い実装方法があるのでしょうか?アプリのインストールが終了したかどうかを確認したいのですが。
どのように解決するのですか?
これを試してみてください。
private boolean isPackageInstalled(String packageName, PackageManager packageManager) {
try {
packageManager.getPackageInfo(packageName, 0);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
渡された名前のパッケージに関する情報を取得しようとします。失敗した場合は
NameNotFoundException
が投げられた場合、その名前のパッケージはインストールされていないことを意味しますので、私たちは
false
.
を渡していることに注意してください。
PackageManager
ではなく
Context
に違反しないように、このメソッドは少し柔軟に使用できるようになります。
デメテルの法則
. へのアクセスがなくても、このメソッドを使用することができます。
Context
インスタンスにアクセスしなくても
PackageManager
のインスタンスがあればよい。
このように使います。
public void someMethod() {
// ...
PackageManager pm = context.getPackageManager();
boolean isInstalled = isPackageInstalled("com.somepackage.name", pm);
// ...
}
注意
Android 11 (API 30)からは
<queries>
をマニフェストで宣言する必要があるかもしれません。チェックアウト
ドキュメント
を参照してください。
関連
-
アンドロイドスタジオでJunitのエラー問題を解決する
-
AndroidでListViewを使ってカスタムテーブルを描画する
-
アンドロイドシェイプ、グラデーション、角丸、ボーダーラインの設定
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] アプリケーションからAndroidのWebブラウザでURLを開くにはどうすればよいですか?
-
[解決済み] Androidアプリケーションのアクティビティ間でデータを受け渡すにはどうすればよいですか?
-
[解決済み] AndroidアプリケーションからGoogle Playストアを直接開くにはどうすればよいですか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
aapt2エラー:ログを確認する(具体的な原因の探り方)
-
Gradle のエラーです。gradle-core.jar (com.android.tools.build:gradle-core:x.x.x) を見つけられませんでした。
-
プログラム "git.exe "を実行できない場合の正しい解決方法です。CreateProcessエラー=2
-
AndroidStudio3.0 Error:Execution failed for task ':app:processDebugResources'.
-
ActivityはOnFragmentInteractionListenerを実装しなければならないに関する質問
-
アンドロイドスタジオでJunitのエラー問題を解決する
-
Android ProgressBarのスタイルカラーを変更する
-
SpinnerのOnItemSelectedListenerのonItemSelectedメソッドの4つのパラメーターの意味
-
Android Studio http://schemas.android.com/apk/res/android 「URIが登録されていません」の解決方法について
-
Android.support.v7.widget.Toolbar が見つかりませんでした。