Android应用A可以访问互联网:
<uses-permission android:name="android.permission.INTERNET"/>
App B无法访问Internet。所以我想通过PendingIntent
从应用A到应用B进行互联网访问。这是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).
这就是我在应用A中发送PendingIntent
的方式:
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
}
但它不起作用!你知道为什么吗?我做错了什么?
提前致谢!
答案 0 :(得分:2)
所以我想通过PendingIntent从app A到app B进行互联网访问。
这是不可能的,抱歉。
这就是PendingIntent的用途,不是吗?
没有
让我们更仔细地看一下您引用的文档部分:
通过向另一个应用程序提供PendingIntent,您授予它执行您指定的操作的权利,就像其他应用程序是您自己一样(具有相同的权限和身份)。
(我要强调的粗体)
App B可以通过PendingIntent
执行send()
,如果您要将PendingIntent
发送到 App B(例如,作为额外的Intent
)。但是:
您正在让应用A通过PendingIntent
执行send()
,启动应用B,而不是将PendingIntent
发送给应用B.
App B并没有神奇地获得App A的权限,只是因为它碰巧是通过App A创建的PendingIntent
调用的。
您无法以任何方式“从应用程序A向应用程序B提供Internet访问”。应用B可以要求App A代表其执行请求(例如,通过发送到App A公开的服务的命令)。但是,在执行此操作时,您需要非常小心,因为默认情况下,您不仅可以要求App A执行操作,但设备上的任何其他应用程序也是如此,除非您使用签名级自定义权限,用于保护App A的导出服务。
答案 1 :(得分:1)
PendingIntent不授予执行任何操作的权限。所有这一切都是为了启动这个意图,就像pendingintent创建者本身一样。
例如,假设您有一个拥有启动受保护广播权限的应用。您的应用可以创建pendingBroadcast并将该对象传递给任何其他没有此权限的应用,但另一个应用可以使用此pendingIntent进行广播。