繁体   English   中英

权限拒绝:启动意图

[英]Permission Denial: starting Intent

我只是将我的应用分为Pro和Free版本。 因此,我将应用程序设为一个库并创建了两个新项目。 免费版本保留namespace "com.mxp.time" ,而专业版本保留namespace namespace "com.sourcecastle.mytime" 因此,免费版本具有与我的库相同的namespace 一切正常,除非我从专业版中的首选项活动开始一项活动。 我得到:

Permission Denial: starting Intent { act=android.intent.action.VIEW cmp=com.mxp.time/.DataManagementActivity } from ProcessRecord{45461048 30784:com.sourcecastle.mytime/u0a10012} (pid=30784, uid=10012) not exported from uid 10013

我的Preferences.xml看起来像:

  <!-- datamanagement -->
<PreferenceCategory
    android:key="datamanagement_category"
    android:title="@string/settings_datamanagement_title" >
    <Preference
        android:summary="@string/settings_datamanagement_pref_message"
        android:title="@string/settings_datamanagement_pref_title" >
        <intent
            android:action="android.intent.action.VIEW"
            android:targetClass="com.mxp.time.DataManagementActivity"
            android:targetPackage="com.mxp.time" />
    </Preference>
</PreferenceCategory>

我的清单:

 <activity
        android:name="com.mxp.time.DataManagementActivity"
        android:exported="true"
        android:label="@string/datamanagement_title" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
        </intent-filter>
    </activity>

我已经设定

“机器人:出口=‘真’

在清单中,但我仍然有例外。

此外,我还有一个普遍的问题:现在应该在哪里定义活动? 在库中还是在实际应用中? 我试图从我的图书馆项目中删除所有权限和活动,但我的应用程序仍在工作。 但是,既然遇到了这个问题,我会问自己这是否不是安全问题,因为在我的应用程序中注册我的活动只会让我覆盖“已导出”之类的设置…

谁能帮我理解吗?

更新:

这似乎可行:

  <!-- datamanagement -->
<PreferenceCategory
    android:key="datamanagement_category"
    android:title="@string/settings_datamanagement_title" >

    <!-- <Preference -->
    <!-- android:summary="@string/settings_datamanagement_pref_message" -->
    <!-- android:title="@string/settings_datamanagement_pref_title" > -->
    <!-- <intent -->
    <!-- android:action="android.intent.action.VIEW" -->
    <!-- android:targetClass="com.mxp.time.DataManagementActivity" -->
    <!-- android:targetPackage="com.mxp.time" /> -->
    <!-- </Preference> -->

    <PreferenceScreen
        android:summary="@string/settings_datamanagement_pref_message"
        android:title="@string/settings_datamanagement_pref_title" >
        <intent android:action="com.mxp.time.DataManagementActivity" />
    </PreferenceScreen>
</PreferenceCategory>

和:

 <activity
        android:name="com.mxp.time.DataManagementActivity"
        android:exported="true"
        android:label="@string/datamanagement_title" >
        <intent-filter>
            <action android:name="com.mxp.time.DataManagementActivity" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

我的另一个问题是: Android Library Manifest vs. App Manifest

以这种方式声明您的活动:

 <activity
        android:name="com.sourcecastle.commons.activity.DataManagementActivity"
        android:exported="true"
        android:label="@string/datamanagement_title" >
        <intent-filter>
            <action android:name="com.sourcecastle.commons.activity.DataManagementActivity" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

在preferences.xml中,可以通过以下方式进行操作:

 <PreferenceCategory
    android:key="datamanagement_category"
    android:title="@string/settings_datamanagement_title" >
    <PreferenceScreen
        android:summary="@string/settings_datamanagement_message"
        android:title="@string/settings_datamanagement_title" >
        <intent android:action="com.sourcecastle.commons.activity.DataManagementActivity" />
    </PreferenceScreen>
</PreferenceCategory>

干杯,斯特凡

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM