2014-02-25 45 views
0

我刚刚在专业版和免费版中拆分了我的应用程序。因此,我让我的应用程序成为图书馆并创建了两个新项目。 免费版保持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> 

我已经设置

“机器人:出口=“true”

在我的清单,但我仍然得到一个例外。

另外我有一个普遍的问题:我现在应该在哪里定义我的活动?在图书馆或真正的应用程序? 我试图从我的图书馆项目中删除所有权限和活动,我的应用程序继续工作。 但因为我得到了这个问题,我问自己,如果这不是一个安全问题,因为登记在我的应用我的活动,只让我重写,如“出口”设置...

谁能帮助我理解?

UPDATE:

这似乎工作:

<!-- 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> 

而我的另一个问题是,这里ansered: Android Library Manifest vs. App Manifest

+0

你找到一个解决这个问题?我对我的一项活动有同样的问题,尽管我使用图书馆已有多年... –

+0

是的, 阅读下面。 – stefan

回答

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> 

干杯, 斯特凡

相关问题