เราได้ติดตั้งแอปพลิเคชั่นแบบเป็นโปรแกรม
- หากติดตั้งแอปพลิเคชั่นไว้ในอุปกรณ์แอปพลิเคชั่นจะเปิดขึ้นโดยอัตโนมัติ
- มิฉะนั้นติดตั้งแอปพลิเคชันเฉพาะ
แนะนำฉัน. ฉันไม่รู้. ขอบคุณ
เราได้ติดตั้งแอปพลิเคชั่นแบบเป็นโปรแกรม
แนะนำฉัน. ฉันไม่รู้. ขอบคุณ
คำตอบ:
ลองกับสิ่งนี้:
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;
}
}
คำตอบที่สะอาดกว่าคำตอบที่ยอมรับได้ (ตามคำถามนี้ ):
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 Store หากแอพหายไปแม้ว่าจะต้องใช้ความระมัดระวังในอุปกรณ์ที่ไม่มี Play Store
รหัสด้านบนใช้งานไม่ได้สำหรับฉัน วิธีการต่อไปนี้ใช้งานได้
สร้างวัตถุเจตนาด้วยข้อมูลที่เหมาะสมจากนั้นตรวจสอบว่าเจตนานั้นสามารถโทรออกได้หรือไม่ใช้ฟังก์ชั่นต่อไปนี้:
private boolean isCallable(Intent intent) {
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
if
ข้อความที่น่าตกใจ! นี่เป็นคำตอบที่ถูกต้องแน่นอน
Intent intent = getPackageManager().getLaunchIntentForPackage("org.package.name");
หากคุณรู้ชื่อแพคเกจสิ่งนี้จะใช้ได้โดยไม่ต้องใช้บล็อก try-catch หรือวนซ้ำแพ็กเกจ:
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();
จะเป็นมิตรกับสไตล์ java มากกว่านี้
รหัสนี้ตรวจสอบเพื่อให้แน่ใจว่าติดตั้งแอพแล้ว แต่ยังตรวจสอบเพื่อให้แน่ใจว่าเปิดใช้งานแล้ว
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;
}
}
ฉันคิดว่าการใช้รูปแบบลอง / จับไม่ค่อยดีสำหรับการแสดง ฉันแนะนำให้ใช้สิ่งนี้:
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;
}
น้ำยาทำความสะอาด (ไม่ต้องลองจับ) กว่าคำตอบที่ยอมรับได้ (ขึ้นอยู่กับ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;
}
ตรวจสอบการติดตั้งแอพหรือไม่ใน Android โดยใช้ kotlin
สร้างส่วนขยาย 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
}
รหัสนี้ใช้เพื่อตรวจสอบสภาพอากาศแอปพลิเคชันของคุณด้วยชื่อแพคเกจที่ติดตั้งหรือไม่ถ้าไม่มันจะเปิดลิงค์ playstore ของแอพของคุณมิฉะนั้นแอพที่ติดตั้งของคุณ
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 );
}
การใช้งานที่ง่ายขึ้นโดยใช้Kotlin
fun PackageManager.isAppInstalled(packageName: String): Boolean =
getInstalledApplications(PackageManager.GET_META_DATA)
.firstOrNull { it.packageName == packageName } != null
และเรียกสิ่งนี้ (หาแอพ Spotify):
packageManager.isAppInstalled("com.spotify.music")
@Egemen Hamutçuคำตอบใน 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()
}
คำตอบทั้งหมดเพียงตรวจสอบว่ามีการติดตั้งแอพพลิเคชั่นหรือไม่ แต่เนื่องจากเราทุกคนรู้ว่าสามารถติดตั้งแอพได้ แต่ผู้ใช้ไม่สามารถใช้งานได้
ดังนั้นโซลูชันนี้จะตรวจสอบทั้งสองอย่าง เช่นการติดตั้งและเปิดใช้งานแอพพลิเค
public static boolean isPackageInstalled(String packageName, PackageManager packageManager) {
try {
return packageManager.getApplicationInfo(packageName, 0).enabled;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
เรียกวิธีการisPackageInstalled()
:
boolean isAppInstalled = isPackageInstalled("com.android.app" , this.getPackageManager());
ตอนนี้ใช้ตัวแปรบูลีนisAppInstalled
และทำสิ่งที่คุณต้องการ
if(isAppInstalled ) {
/* do whatever you want */
}
คำตอบที่ยอดเยี่ยมสำหรับปัญหาอื่น ๆ หากคุณไม่ต้องการแยก "com.myapp.debug" และ "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;
}
ดังนั้น nicer กับ Kotlin suger:
private fun isSomePackageInstalled(context: Context, packageName: String): Boolean {
val packageManager = context.packageManager
return runCatching { packageManager.getPackageInfo(packageName, 0) }.isSuccess
}