【问题标题】:Restrict your android activity to be accessible from other activity限制您的 android 活动可以从其他活动访问
【发布时间】:2021-08-19 20:52:42
【问题描述】:

我的清单中定义了一个 Android 活动:

   <activity
       android:name=“com.me.myapp.myactivity">
       <intent-filter>
           <action android:name="android.intent.action.VIEW" />

           <category android:name="android.intent.category.DEFAULT" />
           <category android:name="android.intent.category.BROWSABLE" />

           <data android:scheme="myapp" />
       </intent-filter>
   </activity>

我想将此活动限制为只能由我的应用程序之外的另一个活动访问,我们称该活动为"com.others.theirapp.theiractivity"。我该如何完成这个限制? 我没有关于其他应用程序及其活动的任何信息,我拥有的唯一信息是它的活动名称“com.others.theirapp.theiractivity”。

【问题讨论】:

  • “可访问”是什么意思?您希望将 Activity 公开为可从其他应用程序“启动”,但您想指定哪些应用程序有资格调用它?
  • 是的@azizbekian
  • 您是否可以控制要授予访问权限的其他应用程序?如果是,是否使用相同的密钥签名?
  • 我会使用&lt;data android:mimeType="application/my_special_mime" /&gt;。要启动 Activity,您需要为 Intent 设置一些内容:intent.setDataAndType(uri, "application/my_special_mime");intent.setType("application/my_special_mime");
  • 除了标识符“com.others.theirapp.theiractivity”之外,我没有关于其他活动/应用程序的任何信息

标签: android flutter android-activity android-manifest


【解决方案1】:

基本上有两种处理方法

  1. 如果其他应用正在使用startActivityForResult 调用您的应用,那么您可以使用getCallingPackage() 获取并检查调用应用包名称

  2. 另一种方法是,您可以将意图中的唯一 ID 从调用活动传递给您的活动,并检查其匹配与否以确保其是受信任的调用(您必须保护此唯一 ID,以便其他用户无法欺骗它)

【讨论】:

    【解决方案2】:

    使用android:permission 属性对清单中的标签应用的权限限制了谁可以启动该活动。在Context.startActivity()Activity.startActivityForResult() 期间检查权限。如果调用者没有所需的权限,则会出现SecurityException

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多