Chúng tôi đã cài đặt các ứng dụng theo chương trình.
- Nếu ứng dụng đã được cài đặt trong thiết bị, ứng dụng sẽ tự động mở.
- Nếu không thì cài đặt ứng dụng cụ thể.
Hướng dẫn tôi. Tôi không có ý kiến. Cảm ơn.
Chúng tôi đã cài đặt các ứng dụng theo chương trình.
Hướng dẫn tôi. Tôi không có ý kiến. Cảm ơn.
Câu trả lời:
Hãy thử với điều này:
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;
}
}
Một số giải pháp sạch hơn câu trả lời được chấp nhận (dựa trên câu hỏi này ):
public static boolean isAppInstalled(Context context, String packageName) {
try {
context.getPackageManager().getApplicationInfo(packageName, 0);
return true;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Tôi đã chọn đặt nó trong một lớp trợ giúp như một tiện ích tĩnh. Ví dụ sử dụng:
boolean whatsappFound = AndroidUtils.isAppInstalled(context, "com.whatsapp");
Câu trả lời này cho biết cách tải ứng dụng từ Cửa hàng Play nếu ứng dụng bị thiếu, mặc dù cần phải cẩn thận trên các thiết bị không có Cửa hàng Play.
Các mã trên không làm việc cho tôi. Cách tiếp cận sau đây có hiệu quả.
Tạo một đối tượng Intent với thông tin phù hợp và sau đó kiểm tra xem Intent có thể gọi được hay không sử dụng chức năng sau:
private boolean isCallable(Intent intent) {
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
if
báo cáo! Đây chắc chắn là câu trả lời đúng
Intent intent = getPackageManager().getLaunchIntentForPackage("org.package.name");
Nếu bạn biết tên gói, thì nó hoạt động mà không cần sử dụng khối thử bắt hoặc lặp qua một loạt các gói:
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();
sẽ thân thiện hơn với phong cách java
Mã này kiểm tra để đảm bảo ứng dụng được cài đặt, nhưng cũng kiểm tra để đảm bảo ứng dụng được bật.
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;
}
}
Tôi nghĩ rằng sử dụng mô hình thử / bắt không tốt cho hiệu suất. Tôi khuyên bạn nên sử dụng điều này:
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;
}
Giải pháp sạch hơn (không cần thử bắt) so với câu trả lời được chấp nhận (dựa trên Thư viện AndroidRate ):
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;
}
Kiểm tra ứng dụng có được cài đặt hay không trong Android bằng cách sử dụng kotlin.
Tạo phần mở rộng kotlin.
fun PackageManager.isAppInstalled(packageName: String): Boolean = try {
getApplicationInfo(packageName, PackageManager.GET_META_DATA)
true
} catch (e: Exception) {
false
}
Bây giờ, có thể kiểm tra xem ứng dụng đã được cài đặt hay chưa
if (packageManager.isAppInstalled("AppPackageName")) {
// App is installed
}else{
// App is not installed
}
Mã này được sử dụng để kiểm tra thời tiết ứng dụng của bạn có cài đặt tên gói hay không nếu không thì nó sẽ mở liên kết playstore của ứng dụng của bạn nếu không ứng dụng đã cài đặt của bạn
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 );
}
Việc thực hiện đơn giản hơn bằng cách sử dụng Kotlin
fun PackageManager.isAppInstalled(packageName: String): Boolean =
getInstalledApplications(PackageManager.GET_META_DATA)
.firstOrNull { it.packageName == packageName } != null
Và gọi nó như thế này (tìm kiếm ứng dụng Spotify):
packageManager.isAppInstalled("com.spotify.music")
@Egemen Hamutçu s trả lời trong 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()
}
Tất cả các câu trả lời chỉ kiểm tra ứng dụng nhất định đã được cài đặt hay chưa. Nhưng, như chúng ta đều biết một ứng dụng có thể được cài đặt nhưng bị người dùng vô hiệu hóa, không thể sử dụng được.
Do đó, giải pháp này kiểm tra cho cả hai. tức là, các ứng dụng đã cài đặt VÀ kích hoạt .
public static boolean isPackageInstalled(String packageName, PackageManager packageManager) {
try {
return packageManager.getApplicationInfo(packageName, 0).enabled;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Gọi phương thức isPackageInstalled()
:
boolean isAppInstalled = isPackageInstalled("com.android.app" , this.getPackageManager());
Bây giờ, sử dụng biến boolean isAppInstalled
và làm bất cứ điều gì bạn muốn.
if(isAppInstalled ) {
/* do whatever you want */
}
Một câu trả lời tuyệt vời cho các vấn đề khác. Nếu bạn không muốn phân biệt "com.myapp.debug" và "com.myapp.release" chẳng hạn!
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;
}