Saya mencoba memasang aplikasi dari Google Play. Saya dapat memahami bahwa saat membuka URL toko Google Play, itu membuka Google Play dan ketika saya menekan tombol kembali, aktivitas dilanjutkan.
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);
Ketika saya kembali ke aktivitas, saya mencoba menelepon ini onResume()
untuk memeriksa apakah aplikasi telah diinstal, tetapi saya menerima kesalahan:
@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 ;
}
Kesalahannya adalah sebagai berikut:
E / AndroidRuntime (796): java.lang.RuntimeException: Tidak dapat memulai aktivitas ComponentInfo {com.example.appinstaller / com.example.appinstaller.MainActivity}: android.content.ActivityNotFoundException: Tidak ada Aktivitas ditemukan untuk menangani Intent {act = android .intent.action.VIEW dat = market: // details? id = com.package.name flg = 0x40080000}
Saya kira aktivitasnya onPause()
. Apakah ada cara yang lebih baik untuk menerapkannya? Saya mencoba memeriksa apakah aplikasi telah selesai dipasang.
sumber
Jawaban:
Coba ini:
Ia mencoba untuk mengambil informasi tentang paket yang namanya Anda kirimkan. Gagal jika, jika
NameNotFoundException
dilempar, itu berarti tidak ada paket dengan nama itu yang diinstal, jadi kami mengembalikannyafalse
.Perhatikan bahwa kami meneruskan a,
PackageManager
bukan aContext
, sehingga metode ini sedikit lebih fleksibel dapat digunakan dan tidak melanggar hukum Demeter . Anda dapat menggunakan metode ini tanpa akses ke sebuahContext
instance, selama Anda memiliki sebuahPackageManager
instance.Gunakan seperti ini:
sumber
Jawaban Robin Kanters benar, tetapi itu memeriksa aplikasi yang diinstal terlepas dari statusnya diaktifkan atau dinonaktifkan.
Kita semua tahu bahwa aplikasi dapat dipasang tetapi dinonaktifkan oleh pengguna, oleh karena itu tidak dapat digunakan.
Ini memeriksa aplikasi yang diinstal DAN diaktifkan:
Anda dapat meletakkan metode ini di kelas seperti
Utils
dan memanggilnya di mana-mana menggunakan:sumber
Coba ini:
sumber
Solusi lebih cepat:
getPackageGids
lebih murah darigetPackageInfo
, sehingga bekerja lebih cepat.Catatan: Ini tidak akan berfungsi di beberapa ruang virtual. Mereka bisa melanggar Android API dan selalu mengembalikan larik, meskipun tidak ada aplikasi dengan nama paket itu.
Dalam kasus ini, gunakan
getPackageInfo
.sumber
sumber
// metode untuk memeriksa paket yang diinstal benar / salah
sumber
Jika Anda ingin mencobanya tanpa blok try catch, dapat menggunakan metode berikut, Buat maksud dan setel paket aplikasi yang ingin Anda verifikasi.
dan panggil metode berikut untuk memeriksa apakah aplikasi telah diinstal
sumber
Mereka yang mencari solusi Kotlin dapat menggunakan metode ini,
Di sini saya telah membagikan kode lengkap, dan juga menangani status yang diaktifkan. Periksa Apakah Aplikasi Diinstal di Android Kotlin
sumber
sumber