Kami telah menginstal aplikasi secara terprogram.
- Jika aplikasi sudah diinstal di perangkat, aplikasi terbuka secara otomatis.
- Kalau tidak, instal aplikasi tertentu.
Bimbing aku. Saya tidak punya ide. Terima kasih.
Kami telah menginstal aplikasi secara terprogram.
Bimbing aku. Saya tidak punya ide. Terima kasih.
Jawaban:
Coba dengan ini:
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;
}
}
Solusi yang agak lebih bersih daripada jawaban yang diterima (berdasarkan pertanyaan ini ):
public static boolean isAppInstalled(Context context, String packageName) {
try {
context.getPackageManager().getApplicationInfo(packageName, 0);
return true;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Saya memilih untuk meletakkannya di kelas pembantu sebagai utilitas statis. Contoh penggunaan:
boolean whatsappFound = AndroidUtils.isAppInstalled(context, "com.whatsapp");
Jawaban ini menunjukkan cara mendapatkan aplikasi dari Play Store jika aplikasi tersebut tidak ada, meskipun harus berhati-hati pada perangkat yang tidak memiliki Play Store.
Kode di atas tidak berfungsi untuk saya. Pendekatan berikut berhasil.
Buat objek Intent dengan info yang sesuai dan kemudian periksa apakah Intent dapat dipanggil atau tidak menggunakan fungsi berikut:
private boolean isCallable(Intent intent) {
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
ifpernyataan! Ini jelas jawaban yang tepat
Intent intent = getPackageManager().getLaunchIntentForPackage("org.package.name");
Jika Anda tahu nama paket, maka ini berfungsi tanpa menggunakan blok coba-tangkap atau beralih melalui banyak paket:
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();
}
return !list.isEmpty();akan lebih ramah gaya java
Kode ini memeriksa untuk memastikan aplikasi diinstal, tetapi juga memeriksa untuk memastikan aplikasi itu diaktifkan.
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;
}
}
Saya pikir menggunakan pola coba / tangkap tidak terlalu baik untuk kinerja. Saya menyarankan untuk menggunakan ini:
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;
}
Solusi yang lebih bersih (tanpa try-catch) daripada jawaban yang diterima (berdasarkan AndroidRate Library ):
public static boolean isPackageExists(@NonNull final Context context, @NonNull final String targetPackage) {
List<ApplicationInfo> packages = context.getPackageManager().getInstalledApplications(0);
for (ApplicationInfo packageInfo : packages) {
if (targetPackage.equals(packageInfo.packageName)) {
return true;
}
}
return false;
}
Periksa Aplikasi diinstal atau tidak di Android dengan menggunakan kotlin.
Membuat ekstensi kotlin.
fun PackageManager.isAppInstalled(packageName: String): Boolean = try {
getApplicationInfo(packageName, PackageManager.GET_META_DATA)
true
} catch (e: Exception) {
false
}
Sekarang, dapat memeriksa apakah aplikasi diinstal atau tidak
if (packageManager.isAppInstalled("AppPackageName")) {
// App is installed
}else{
// App is not installed
}
Kode ini digunakan untuk memeriksa cuaca aplikasi Anda dengan nama paket diinstal atau tidak jika tidak maka itu akan membuka tautan playstore dari aplikasi Anda jika tidak, aplikasi Anda yang terinstal
String your_apppackagename="com.app.testing";
PackageManager packageManager = getPackageManager();
ApplicationInfo applicationInfo = null;
try {
applicationInfo = packageManager.getApplicationInfo(your_apppackagename, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (applicationInfo == null) {
// not installed it will open your app directly on playstore
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + your_apppackagename)));
} else {
// Installed
Intent LaunchIntent = packageManager.getLaunchIntentForPackage(your_apppackagename);
startActivity( LaunchIntent );
}
Implementasi yang lebih sederhana menggunakan Kotlin
fun PackageManager.isAppInstalled(packageName: String): Boolean =
getInstalledApplications(PackageManager.GET_META_DATA)
.firstOrNull { it.packageName == packageName } != null
Dan menyebutnya seperti ini (mencari aplikasi Spotify):
packageManager.isAppInstalled("com.spotify.music")
@Egemen Hamutçu menjawab di kotlin B-)
private fun isAppInstalled(context: Context, uri: String): Boolean {
val packageInfoList = context.packageManager.getInstalledPackages(PackageManager.GET_ACTIVITIES)
return packageInfoList.asSequence().filter { it?.packageName == uri }.any()
}
Semua jawaban hanya memeriksa aplikasi tertentu diinstal atau tidak. Tapi, seperti kita ketahui aplikasi dapat diinstal tetapi dinonaktifkan oleh pengguna, tidak dapat digunakan.
Oleh karena itu, solusi ini memeriksa keduanya. yaitu, aplikasi yang diinstal DAN diaktifkan .
public static boolean isPackageInstalled(String packageName, PackageManager packageManager) {
try {
return packageManager.getApplicationInfo(packageName, 0).enabled;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Panggil metode isPackageInstalled():
boolean isAppInstalled = isPackageInstalled("com.android.app" , this.getPackageManager());
Sekarang, gunakan variabel boolean isAppInstalleddan lakukan apa pun yang Anda inginkan.
if(isAppInstalled ) {
/* do whatever you want */
}
Jawaban keren untuk masalah lain. Misalnya, jika Anda tidak ingin membedakan "com.myapp.debug" dan "com.myapp.release"!
public static boolean isAppInstalled(final Context context, final String packageName) {
final List<ApplicationInfo> appsInfo = context.getPackageManager().getInstalledApplications(0);
for (final ApplicationInfo appInfo : appsInfo) {
if (appInfo.packageName.contains(packageName)) return true;
}
return false;
}