我有一个旨在打开系统设置应用程序的“数据使用摘要” View 的 Intent (未记录;from this Stack Overflow answer):
Intent openIntent = new Intent(Intent.ACTION_MAIN);
openIntent.setComponent(new ComponentName("com.android.settings", "com.android.settings.Settings$DataUsageSummaryActivity"));
openIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(openIntent);
是否可以检查此组件是否存在以及 Intent 是否会成功执行?
A similar question在 Android (5.0) 模拟器中给出的答案不适用于此 Intent (导致设置应用程序多次崩溃 – see stacktrace)。下面的代码答案返回 true(即成功),即使我上面的代码会使设置应用程序崩溃。到目前为止,我的 Activity Intent 仅在模拟器上崩溃,推测是由于没有数据计划集(?)
private boolean isCallable(Intent intent) {
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
和
boolean activityExists = intent.resolveActivityInfo(getPackageManager(), 0) != null;
谢谢。
最佳答案
您尝试的代码 fragment 之所以说该组件可用,是因为该组件可用。当您尝试启动该组件时,它碰巧崩溃了。这是由于模拟器错误、Android 错误,还是您碰巧启动了一个没有记录为由第三方应用程序启动的 Activity ,我不能说。
Is it possible to check whether this component exists
使用您问题中的代码 fragment 。在这种情况下,组件存在。
Is it possible to check whether... the intent will execute successfully?
一般不会。第三方应用程序是由第三方编写的。它们不仅可能存在错误/限制,而且您无法确定它们是否在您的应用程序中存在。
关于java - 检查 Intent 调用特定 Component 是否可调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34473419/