我的应用程序中有一个Activity
A,Application1
和Application2
可以调用。
AcitivityA
文件中Manifest
的配置如下:
<activity
android :name=".activity.ActivityA"
android :exported="true"
android :screenOrientation="portrait"/>
Application1
和Application2
如何致电ActivityA
:
PackageManager packageManager = getPackageManager();
Intent intent = new Intent();
intent.setClassName(“com.abc.test", “com.abc.test.activity.ActivityA" );
List activities = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if (activities.size() > 0 ) {
startActivity(intent);
}
为了安全起见,我想在Application1
中添加一个包含Application2
和ActivityA
包名称的白名单,只有ActivityA's
的包名才能打开{1}}来电者在白名单中。
因此可以获得Activities
&#39;的包名称。 ActivityA
中的来电应用?
编辑:
如果在Intent中没有额外数据就不可能,还有其他想法保持Activity A
安全吗?
答案 0 :(得分:1)
尝试Activity
的{{3}}和getCallingPackage()方法。
答案 1 :(得分:0)
只要来电者没有提供额外的信息,答案就是否定。
如果您只想保护特定的来电者,请使用权限。 参见
如果您拥有所有来电者,那么我建议您使用相同的密钥对所有这些密码进行签名,并使用protectionLevel
Signature
的权限。
另一个需要更多代码的方法是使用服务进行通信。
从第一个链接引用:
使用Binder或Messenger是Android中RPC风格IPC的首选机制。它们提供了一个定义良好的接口,可以根据需要实现端点的相互身份验证。
答案 2 :(得分:0)
我所做的是通过意图传递调用活动。例如
public class MainActivity extends AppCompatActivity {
private final static String THIS_ACTIVITY = "MainActivity";
.........
Intent intent = new Intent(this, ShopAddActivity.class);
intent.putExtra("Caller",THIS_ACTIVITY);
startActivity(intent);
并在另一项活动中(调用相同的子活动): -
public class ShopListByCursorActivity extends AppCompatActivity {
private final static String THIS_ACTIVITY = "ShopListByCursorActivity";
.......
Intent intent = new Intent(findViewById(R.id.aslbclv01).getContext(), ShopAddActivity.class);
intent.putExtra("Caller", THIS_ACTIVITY + "Update");
startActivity(intent);
然后在被调用的活动中(作为检测呼叫者的一个例子)
if(getIntent().getStringExtra("Caller").equals("ShopListByCursorActivityUpdate")) {
DO STUFF HERE
}