0

Android 应用 A 可以上网:

<uses-permission android:name="android.permission.INTERNET"/>

应用 B 无法访问 Internet。所以我想通过 a 为应用程序 A 提供互联网访问权限到应用程序PendingIntentB。这是PendingIntent为了什么,不是吗?

By giving a PendingIntent to another application, you are granting it the right to perform the operation you have specified as if the other application was yourself (with the same permissions and identity).

这就是我发送PendingIntent应用程序 A 的方式:

Intent mainApp = new Intent(Intent.ACTION_MAIN);
mainApp.addCategory(Intent.CATEGORY_LAUNCHER);
mainApp.setClassName("com.other.package", "com.other.package.MainActivity");
int flags = PendingIntent.FLAG_UPDATE_CURRENT | Intent.FLAG_ACTIVITY_NEW_TASK;
PendingIntent pi = PendingIntent.getActivity(this, 23894729834, mainApp, flags);
try {
    pi.send();
}
catch (CanceledException e) { }

这就是我尝试在应用程序 B(具有 launchMode=singleTask)中接收它的方式:

@Override
protected void onNewIntent(Intent i) {
    setIntent(i);
    // do some things with Internet access here
}

但它不起作用!你知道为什么吗?我做错什么了?

提前致谢!

4

2 回答 2

2

所以我想通过 PendingIntent 从应用 A 到应用 B 提供 Internet 访问权限。

这是不可能的,对不起。

这就是 PendingIntent 的用途,不是吗?

不。

让我们更仔细地看一下您引用的文档部分:

通过将 PendingIntent 提供给另一个应用程序,您授予它执行您指定的操作的权利,就好像另一个应用程序是您自己一样(具有相同的权限和身份)。

(粗体字表示强调)

应用程序 B 可以执行PendingIntentvia ,如果您要将 发送应用程序 B(例如,作为额外的)send(),它将像应用程序 A 执行它一样运行。然而:PendingIntent Intent

  • 您正在让 App A 执行PendingIntentvia send(),启动 App B,而不是发送PendingIntent到 App B。

  • App B 并没有神奇地获得 App A 的权限,只是因为它恰好PendingIntent被 App A 创建的一些调用。

无论如何,您都无法“从应用程序 A 向应用程序 B 提供 Internet 访问权限”。App B 可以要求 App A 代表它执行请求(例如,通过发送到 App A 公开的服务的命令)。但是,您在执行此操作时需要非常小心,因为默认情况下,不仅可以要求 App A 执行操作,而且设备上的任何其他应用程序也可以执行此操作,除非您使用签名级别的自定义权限保护 App A 的导出服务。

于 2012-08-16T00:27:38.557 回答
1

PendingIntent 不授予执行任何操作的权限。它所做的只是使这个意图的启动就好像待处理的意图创建者自己做了一样。

例如,考虑您有一个有权启动受保护广播的应用程序。您的应用可以创建 pendingBroadcast 并将对象传递给没有此权限的任何其他应用,而其他应用可以使用此 pendingIntent 进行广播。

于 2012-08-15T23:55:16.630 回答