Android 是否可以获取活动的包名称';进程间通信时调用方应用程序?

Android 是否可以获取活动的包名称';进程间通信时调用方应用程序?,android,android-intent,ipc,Android,Android Intent,Ipc,我有一个活动A,可以在我的应用程序中由Application1和Application2调用 Manifest文件中AcitivityA的配置如下: <activity android :name=".activity.ActivityA" android :exported="true" android :screenOrientation="portrait"/> 为了安全起见,我想在ActivityA中添加一个包含Application1和Applicati

我有一个
活动
A,可以在我的应用程序中由
Application1
Application2
调用

Manifest
文件中
AcitivityA
的配置如下:

<activity
   android :name=".activity.ActivityA"
   android :exported="true"
   android :screenOrientation="portrait"/>
为了安全起见,我想在
ActivityA
中添加一个包含
Application1
Application2
的包名的白名单,只有当
ActivityA的
调用方的包名在白名单中时才能打开该白名单

那么,是否可以在
ActivityA
中获取调用方应用程序的
Activities
包名

编辑:


如果没有额外的数据是不可能的,那么只要来电者没有额外提供关于自己的信息,任何其他保持
活动A
安全的想法都是不可能的

如果只想保护特定呼叫者的安全,请使用权限。 看

如果您拥有所有呼叫者,那么我建议您使用相同的密钥对所有呼叫者进行签名,并使用具有
protectionLevel
Signature
的权限

另一种需要更多代码的方法是使用服务进行通信

引自第一链接:

使用活页夹或信使是Android中RPC风格IPC的首选机制。如果需要,它们提供了一个定义良好的接口,支持端点的相互身份验证


我所做的是通过intent传递调用活动。乙二醇

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);
在另一个活动中(调用相同的子活动):-

然后在被调用的活动中(作为检测调用方的一个示例)


尝试使用
活动的方法

但不确定安全方面,因此这可能不够安全。然而,一个好处是,这种方法可以检测活动中作为调用者的部分。在上面的例子中。我将更新附加到此_活动,以表明调用方请求的是更新模式,而不是添加模式。安全性非常低。我的意思是,一个未列入白名单的来电者只需要知道一个列入白名单的来电者的名字,它就可以很容易地假装是那个来电者。如果您想为不同的调用者执行不同的操作,这很好。附加值可能是某种类型的安全代码。无法对此类代码保密,除非您希望在活动之间执行类似SSL的完整握手。直接从文档:
注意:如果调用活动不期望结果(即未使用包含请求代码的startActivityForResult(Intent,int)表单),则调用包将为空。
我不拥有所有调用方,因此,我无法使用带有protectionLevel签名的权限。如果我对普通应用程序使用权限,其他应用程序可以修改它们的清单以使用相同的权限。不,这有点复杂。你必须决定你的安全级别值多少工作。请注意,android上的任何应用程序都没有完美的安全性。使用权限通常就足够了。如果您必须共享高度敏感的数据,请使用服务。没有太多的中间。谢谢你的回复,也许我会使用权限。
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
        }