android - Activity 机器人 :exported ="true" is not exported

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

在我的应用程序的首选项中,我调用以特殊方式处理某些参数的 Activity 。到目前为止它运作良好。 但是,为了创建试用版和专业版,我刚刚创建了一个包含所有代码的库和一个调用该库的新演示应用程序。 除了由文件 preferences.xml 中的声明启动的调用外,大多数应用程序都可以正常工作。 所有的语句都在demo版的activityManifest文件中进行。 我将语句“android:exported ="true"添加到由首选项调用的 ClassesManager Activity 中,但尽管进行了多次尝试(通过添加带有各种语句的 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)

演示应用 list 的摘录:

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

谁能告诉我是什么阻止了此 Activity 的正确导出? 注意:我已经完成了几次“清理”和“重建”以消除 Eclipse 中的任何担忧。

最佳答案

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

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

关于android - Activity 机器人 :exported ="true" is not exported,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25465580/

相关文章:

android - 在 AndroidManifest.xml 中单独使用 intent.category.HOME 与同时使用 intent.category.DEFAULT 之间的区别

Android应用程序错误 "Unfortunately App has Stopped"

java - 如何设置 Canvas 大小?

android - 翻译动画部分的屏幕变为空白

android - Google Play 服务 Unity 插件不显示排行榜

java - 如何将 "ellipsize"AlertDialog的标题放在中间?

android - 如何从 PlaceholderFragment 启动 Intent?

Android - getCurrentFocus().clearFocus() 时会发生什么

Android 应用程序结构 - Activity 与 Fragment

android - 无法使用 Android 版 Facebook sdk 登录其他用户