我刚刚在Pro和Free版本中拆分了我的应用程序。因此,我使我的应用程序成为一个库并创建了两个新项目。
免费版本保留了namespace
"com.mxp.time"
,专业版获得了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>
答案 0 :(得分:1)
以这种方式宣布你的活动:
<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>
干杯, 斯蒂芬