活动android:exported =“true”未导出

时间:2014-08-23 19:21:45

标签: android android-intent android-activity android-preferences

在我的应用程序的首选项中,我调用了处理特定方式某些参数的活动。到目前为止它运作良好。 但是,要创建试用版和专业版,我只创建了一个包含所有代码的库和一个调用此库的新演示应用程序。 除了文件preferences.xml中的声明启动的调用之外,大多数应用程序都有效。 所有语句都在演示版的活动清单文件中进行。 我将语句“android:exported =”true“添加到由首选项调用的ClassesManager活动中,但尽管尝试了很多次(通过添加带有各种语句的intent-filter),我总是遇到消息崩溃:

FATAL EXCEPTION: main
Process: be.adsoft.etimemo.demo, PID: 31250
java.lang.SecurityException: Permission   Denial: starting Intent { act=android.intent.action.VIEW cmp=be.adsoft.etimemo.base/.ClassesManager } from ProcessRecord{42fe8718 31250:be.adsoft.etimemo.demo/u0a182} (pid=31250, uid=10182) not exported from uid 10181
    at android.os.Parcel.readException(Parcel.java:1465)
    at android.os.Parcel.readException(Parcel.java:1419)

演示应用程序清单摘录:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/EtiHoloLight" >

    <!--  activity par défaut -->
    <activity
        android:name="be.adsoft.etimemo.base.ConnectScreen"
        android:configChanges="locale"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
   </activity>

    <!--  Déclaration de l'activité Préférences -->
    <activity 
        android:name="be.adsoft.etimemo.base.Preferences"
    android:label="@string/titre_preferences">
    </activity>

    ...

    <!--  Déclaration de l'activité ClasseManager -->
    <activity 
        android:name="be.adsoft.etimemo.base.ClassesManager"
        android:label="@string/txt_clmanager_titre_page"
    android:exported="true">            
    </activity>

</application>

preferences.xml文件的摘录:

<PreferenceScreen 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:robobunny="http://robobunny.com" >

<PreferenceCategory 
    android:title="@string/groupe_classe_title" 
    android:key="groupe_classe">

    <Preference
        android:title="@string/grkeyList_title"
        android:summary="@string/grkeyList_summary">
        <intent 
            android:action="android.intent.action.VIEW"
            android:targetPackage="be.adsoft.etimemo.base"
            android:targetClass="be.adsoft.etimemo.base.ClassesManager"
        />
    </Preference>

</PreferenceCategory>

谁可以告诉我是什么阻止此活动正确导出? 注意:我已经做了几次“干净”和“重建”以消除Eclipse中的任何担忧。

1 个答案:

答案 0 :(得分:1)

我自己找到了解决方案后,分享它以节省其他人的时间: 您应该在首选项的声明声明中,将“package”作为应用程序的名称(.demo),并将库中的活动名称作为活动名称(.base):

    <Preference
        android:title="@string/grkeyList_title"
        android:summary="@string/grkeyList_summary">
        <intent 
            android:action="android.intent.action.VIEW"
            android:targetPackage="be.adsoft.etimemo.demo"
            android:targetClass="be.adsoft.etimemo.base.ClassesManager"                                 
        />
    </Preference>