[英]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>
以这种方式声明您的活动:
<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.