回答
試試這個:
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;
}
}
@Sathish:我希望這可能對你有所幫助 – Aerrow 2012-07-09 09:57:24
毫無疑問,你的帖子真的是h但我收到異常「java.lang.RuntimeException:添加窗口失敗」和「E/AndroidRuntime(7554):引起:android.os.TransactionTooLargeException 05-14 11:37:25.305:E/AndroidRuntime(7554 ):\t at android.os.BinderProxy.transact(Native Method) 05-14 11:37:25.305:E/AndroidRuntime(7554):\t at android.view.IWindowSession $ Stub $ Proxy.add(IWindowSession.java: 516) 05-14 11:37:25.305:E/AndroidRuntime(7554):\t at android.view.ViewRootImpl.setView(ViewRootImpl.java:494) 「 – DJhon 2014-05-14 06:16:00
@BlueGreen:嗨,希望這個鏈接可以幫助你, http://stackoverflow.com/questions/11451393/what-to-do-on-transactiontoolargeexception,否則,如果你使用Dialog Class意味着請檢查它。 :) – Aerrow 2014-05-14 06:19:50
上面的代碼並沒有爲我工作。以下方法奏效。
創建具有適當信息的意圖對象,然後檢查是否意圖是可調用或不使用下面的函數:
private boolean isCallable(Intent intent) {
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
這樣更好,因爲它不需要使用異常來控制流量! – QED 2015-08-29 22:11:29
@QED它使用Exception作爲'if'語句的人數驚人!這絕對是正確的答案 – ILikeTacos 2015-09-07 19:44:25
意圖的內容是什麼?使用packageName的字符串不起作用 – 2015-11-18 17:42:06
有點清潔的解決方案比接受的答案(基於this question):
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");
This answer演示如何從Play商店獲取應用程序,如果應用程序丟失,雖然護理需要採取上沒有Play商店的設備。
這是否需要任何特定的Android權限才能使用? – Bootstrapper 2017-02-22 14:04:54
@Bootstrapper:不,它不需要任何特殊的權限。 – Jonik 2017-02-22 15:38:40
謝謝(工作解決方案) – 2017-11-10 14:56:58
如果您知道軟件包名稱,則此工程沒有使用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風格友好 – headsvk 2017-04-03 14:37:10
此代碼檢查,以確保已安裝的應用程序,而且還檢查確保它已啓用。
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;
}
}
這裏的uri是什麼? – 2016-07-10 04:35:42
這是應用程序的包名稱。例如,「com.example.apps.myapp」。我編輯了我的答案以顯示packageName而不是uri。 – youravgjoe 2016-07-11 14:30:54
有道理謝謝。 – 2016-07-11 14:37:43
我認爲使用try/catch模式對性能不是很好。我建議使用此:
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;
}
在科特林上述代碼 ''' 私人樂趣isAppInstalled(上下文:語境,URI:字符串):布爾{ VAL packageInfoList = context.packageManager.getInstalledPackages(PackageManager.GET_ACTIVITIES) 返回packageInfoList.asSequence()過濾{它?.packageName == uri} .any() } ''' – 2017-09-01 12:42:28
@EgemenHamutçuS IN科特林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()
}
試試這個
此代碼是用於檢查的天氣包名稱您的應用程序安裝或 如果不是,那麼它會打開您的應用程序的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);
}
使用科特林
fun PackageManager.isAppInstalled(packageName: String): Boolean =
getInstalledApplications(PackageManager.GET_META_DATA)
.firstOrNull { it.packageName == packageName } != null
,並調用它像這樣的簡單的實現(尋求Spotify應用):
packageManager.isAppInstalled("com.spotify.music")
- 1. 如何檢查QQ(tencent)應用程序是否安裝在Android上或不是以編程方式安裝?
- 2. 如何以編程方式檢查是否安裝了應用程序?
- 3. 如何以編程方式檢查是否安裝使用Java
- 4. 以編程方式檢測Android上是否安裝了應用程序
- 5. 以編程方式檢測應用程序是否安裝在iPhone上
- 6. 檢查安裝時是否安裝了android應用程序
- 7. Android在後臺以編程方式安裝應用程序
- 8. 如何我可以檢查是否安裝了應用程序
- 9. 如何以編程方式檢查Visio是否已安裝以及在哪裏?
- 10. 檢查Stackable文件系統是否以編程方式安裝
- 11. 如何以編程方式檢查應用程序是否已安裝或未使用JAVASCRIPT?
- 12. 程序中的錯誤以編程方式在Android上安裝應用程序
- 13. 如何以編程方式安裝iOS應用程序?
- 14. 如何檢查javafx應用程序是否已經以編程方式運行?
- 15. 以編程方式在IOS中安裝企業應用程序
- 16. 如何以編程方式確定.NET程序集是否安裝在GAC中?
- 17. 如何以編程方式檢查c#中是否存在程序集引用?
- 18. 如何以編程方式阻止在Android安裝/卸載應用程序?
- 19. 以編程方式安裝應用程序快捷方式
- 20. 如何應用程序可以檢查Android是否已安裝庫?
- 21. Android:您可以檢查應用程序安裝是否新鮮或已安裝應用程序的舊版本?
- 22. 如何檢查用戶是否安裝了應用程序?
- 23. 如何以編程方式檢查是否安裝了SAP Business One客戶端
- 24. 檢查Android應用程序是否由Playstore安裝
- 25. 以編程方式從內存中安裝應用程序
- 26. 如何檢查應用程序是否已安裝或正在首次安裝
- 27. 如何檢查應用程序是否已安裝?
- 28. 如何檢查應用程序是否提前安裝?
- 29. 如何檢查之前是否安裝了iPhone應用程序?
- 30. 如何以編程方式查詢iphone應用程序的安裝信息?
[Android系統可能的複製 - 檢查另一個應用程序的存在](http://stackoverflow.com/questions/3694267/android-check-for-presence-of-another-app) – noelicus 2017-04-04 09:19:13