java - 检查 Intent 调用特定 Component 是否可调用?

标签 java android android-intent

我有一个旨在打开系统设置应用程序的“数据使用摘要” 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;
}

From this answer..

boolean activityExists = intent.resolveActivityInfo(getPackageManager(), 0) != null;

From this one..

谢谢。

最佳答案

您尝试的代码 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/

相关文章:

java - AWS Docker 部署不使用 Dockerrun 文件向外界公开端口

android - 得到 SSLPeerUnverifiedException Hostname 196.1X.3X.X2 not verified error in Android 9 with Self signed certificate,但适用于所有其他版本

Android Google Maps API v2 显示路线

android - Android Studio 中的抽屉导航模板

java - Android Intent打开新 Activity 但没有关闭旧 Activity

android - 将通知 ID 发送到每个通知的 Activity

java - 国家、州和城市微调器无法正常工作

java - 实现多个接口(interface)的类的替代方案?

java - 需要将大型 QueryRunner 结果流式传输到文件,似乎存储在内存中

java - JSON 异常 : org. json.JSONException: Unterminated array