Android - 动态壁纸+活动“启动器没有启动Intent的权限”

时间:2013-08-22 21:14:35

标签: android android-intent android-activity

我创建了有效的动态壁纸。然后,我尝试使用config添加主要活动,但是当我点击程序列表上的图标时,“Launcher没有启动Intent的权限”错误。

ERROR/Launcher(8246): Launcher does not have the permission to launch Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.revicostudio.neonshiftwallpaper/.ConfigActivity }. Make sure to create a MAIN intent-filter for the corresponding activity or use the exported attribute for this activity. tag=ApplicationInfo(title=Neon Shift Wallpaper) intent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.revicostudio.neonshiftwallpaper/.ConfigActivity }
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.revicostudio.neonshiftwallpaper/.ConfigActivity } from ProcessRecord{41ea3da8 8246:com.android.launcher/u0a10035} (pid=8246, uid=10035) not exported from uid 10139

清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.revicostudio.neonshiftwallpaper"
          android:versionCode="1"
          android:versionName="1.0">
    <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="17"/>

    <uses-feature
            android:glEsVersion="0x00020000"
            android:required="true"
            android:name="android.software.live_wallpaper">
    </uses-feature>

    <application
            android:icon="@drawable/icon"
            android:configChanges="keyboardHidden|orientation"
            android:label="@string/app_name" >
        <!--  Live Wallpaper Service -->
        <service android:name=".MainService"
                 android:enabled="true"
                 android:configChanges="keyboardHidden|orientation"
                 android:permission="android.permission.BIND_WALLPAPER"
                 android:icon="@drawable/icon"
                 android:description="@string/wallpaper_description">
            <intent-filter>
                <action android:name="android.service.wallpaper.WallpaperService"/>
            </intent-filter>
            <meta-data android:name="android.service.wallpaper"
                       android:resource="@xml/wallpaper"/>
        </service>

        <activity
                android:name=".ConfigActivity"
                android:label="@string/app_name"
                android:exported="true"
                android:theme="@android:style/Theme.Light.WallpaperSettings" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
                android:name="com.revicostudio.neonshiftwallpaper.WallpaperPreferences"
                android:exported="true"
                android:label="@string/app_name"
                android:theme="@android:style/Theme.Light.WallpaperSettings" >
        </activity>
    </application>
</manifest>

1 个答案:

答案 0 :(得分:1)

我认为这是因为当您在主屏幕上为应用程序添加快捷方式时,启动程序会从清单中保留它自己的原始意图副本,可能格式化为String而不是实际的Java对象。

因此,在通过修改过滤器或它指向的类来更改意图后,您最终会得到一个死的快捷方式。

如果发生这种情况,如果您尝试从应用程序抽屉中启动它,它应该可以正常工作。您可以从主屏幕删除快捷方式并重新添加,快捷方式应该可以正常工作。

如果您在版本之间修改主要活动的类名,则可能会发生这种情况。