如何使用导航组件在单个 activity 设计中使用权限?
How to work with permissions in single activity design using navigation component?
我之前的应用有很多activity,其中一些声明为exported true,以便其他应用可以通过intent filter调用它们。
其中一些还具有特定权限,这也在我的活动中设置。
现在,我正在开发一个使用单一 activity 的应用程序。
所以,我很想知道如何在单个 activity 设计中处理这个权限问题,因为我只有一个 activity.
以前,在多个活动中,我可以轻松地在特定 activity 中设置权限。我怎么能在这里处理这个?
我是新手。我搜索了很多,但没有找到任何线索。
编辑:
Multiple activities declaration:
<permission
android:name="com.example.permission"
android:protectionLevel="signatureOrSystem"
tools:ignore="SignatureOrSystemPermissions"
/>
// Activity 1: With permission, exported = true
<activity
android:name=".place"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout"
android:exported="true"
android:label="place"
android:permission="com.example.permission" // Sets a permission
android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">
<intent-filter>
<action android:name="com.action.places" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
// Activity 2: With no permission, exported = true
<activity
android:name="userCheck"
android:configChanges="mcc|mnc|keyboard|keyboardHidden|orientation"
android:exported="true"
android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">
<intent-filter>
<action android:name="com.confirm.passowrd" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
现在,我想转为单身activity。
// Single activity: exported = true. How can i handle permission for place action?
<activity
android:name="com.example.singleActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<!-- Place -->
<action android:name="com.action.places"/> // How can i handle permission for this action?
<!-- UserCheck -->
<action android:name="com.confirm.passowrd" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
如果您想限制单个 Activity
在某些情况下启动而不在其他情况下启动,则不能使用基于清单的权限。基于清单的权限控制对特定 Activity
的访问,无论它是如何启动的。
您可以为您的单身 Activity
创建一个 <activity-alias>
。 <activity-alias>
是引用实际 Activity
的清单条目,但提供备用启动选项。您可以在 <activity-alias>
上指定一组不同于您在实际 Activity
上拥有的权限。您还可以指定不同的 launchMode
、不同的 <intent-filter>
等
我之前的应用有很多activity,其中一些声明为exported true,以便其他应用可以通过intent filter调用它们。 其中一些还具有特定权限,这也在我的活动中设置。
现在,我正在开发一个使用单一 activity 的应用程序。 所以,我很想知道如何在单个 activity 设计中处理这个权限问题,因为我只有一个 activity.
以前,在多个活动中,我可以轻松地在特定 activity 中设置权限。我怎么能在这里处理这个? 我是新手。我搜索了很多,但没有找到任何线索。
编辑:
Multiple activities declaration:
<permission
android:name="com.example.permission"
android:protectionLevel="signatureOrSystem"
tools:ignore="SignatureOrSystemPermissions"
/>
// Activity 1: With permission, exported = true
<activity
android:name=".place"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout"
android:exported="true"
android:label="place"
android:permission="com.example.permission" // Sets a permission
android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">
<intent-filter>
<action android:name="com.action.places" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
// Activity 2: With no permission, exported = true
<activity
android:name="userCheck"
android:configChanges="mcc|mnc|keyboard|keyboardHidden|orientation"
android:exported="true"
android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">
<intent-filter>
<action android:name="com.confirm.passowrd" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
现在,我想转为单身activity。
// Single activity: exported = true. How can i handle permission for place action?
<activity
android:name="com.example.singleActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<!-- Place -->
<action android:name="com.action.places"/> // How can i handle permission for this action?
<!-- UserCheck -->
<action android:name="com.confirm.passowrd" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
如果您想限制单个 Activity
在某些情况下启动而不在其他情况下启动,则不能使用基于清单的权限。基于清单的权限控制对特定 Activity
的访问,无论它是如何启动的。
您可以为您的单身 Activity
创建一个 <activity-alias>
。 <activity-alias>
是引用实际 Activity
的清单条目,但提供备用启动选项。您可以在 <activity-alias>
上指定一组不同于您在实际 Activity
上拥有的权限。您还可以指定不同的 launchMode
、不同的 <intent-filter>
等