我正在尝试修改 Android 源,以便 BroadcastReceiver 可以知道谁调用了该操作。
android.app.activity:
@Override
public void startActivity(Intent intent) {
intent.putExtra("packageName", this.getPackageName());
startActivity(intent, null);
}
我编写了一个具有 CALL_PHONE 权限的测试应用程序。作为调试步骤,我还尝试查看是否可以从调用应用程序的 Intent 中传递一些内容:
呼叫应用程序(应用程序#1):
Intent dialIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:8005551212"));
dialIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
dialIntent.putExtra("StubTest", "it worked!");
startActivity(dialIntent);
但是在我的 BroadcastReceiver 中,该意图没有来自我所做的 Activity 源文件更改的意图值,也没有我从调用活动中添加的意图值。
具有广播接收器的单独应用程序(应用程序#2):
public class CallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Set<String> k = bundle.keySet();
if (k!=null && k.size() > 0) {
Iterator<String> i = k.iterator();
while (i.hasNext()) {
String key = i.next();
try {
System.out.println("KEY: " + key + "=" + bundle.getString(key));
} catch (Exception e) {
logIt("skipping KEY: " + key);
}
}
}
System.out.println(bundle.getString("packageName"));
System.out.println(bundle.getString("StubTest"));
但是,“packageName”和“StubTest”始终为空。