如何使用导航组件在单个 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>