首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >应用程序崩溃错误需要com.android.launcher3.permission.WRITE_SETTINGS,或grantUriPermission

应用程序崩溃错误需要com.android.launcher3.permission.WRITE_SETTINGS,或grantUriPermission
EN

Stack Overflow用户
提问于 2015-05-03 16:40:33
回答 1查看 3.6K关注 0票数 3

你好,我正在开发一个基于launcher3 form的启动程序,它只运行在我所有没有运行cyanogenmod的设备上,当我试图在运行cyanogenmod的设备上安装它时,它会加载一分钟,然后崩溃。

下面是逻辑猫说的话:

代码语言:javascript
运行
复制
05-03 10:32:26.665: E/AndroidRuntime(9845): FATAL EXCEPTION: launcher-loader
05-03 10:32:26.665: E/AndroidRuntime(9845): Process: com.d4a.tobiasnow, PID: 9845
05-03 10:32:26.665: E/AndroidRuntime(9845): java.lang.SecurityException: Permission Denial: writing com.android.launcher3.LauncherProvider uri content://com.android.launcher3.settings/favorites/18?notify=false from pid=9845, uid=10093 requires com.android.launcher3.permission.WRITE_SETTINGS, or grantUriPermission()
05-03 10:32:26.665: E/AndroidRuntime(9845):     at android.os.Parcel.readException(Parcel.java:1546)
05-03 10:32:26.665: E/AndroidRuntime(9845):     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)
05-03 10:32:26.665: E/AndroidRuntime(9845):     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
05-03 10:32:26.665: E/AndroidRuntime(9845):     at android.content.ContentProviderProxy.update(ContentProviderNative.java:568)
05-03 10:32:26.665: E/AndroidRuntime(9845):     at android.content.ContentResolver.update(ContentResolver.java:1333)
05-03 10:32:26.665: E/AndroidRuntime(9845):     at com.d4a.tobaisnow.LauncherModel$5.run(LauncherModel.java:526)
05-03 10:32:26.665: E/AndroidRuntime(9845):     at android.os.Handler.handleCallback(Handler.java:739)
05-03 10:32:26.665: E/AndroidRuntime(9845):     at android.os.Handler.dispatchMessage(Handler.java:95)
05-03 10:32:26.665: E/AndroidRuntime(9845):     at android.os.Looper.loop(Looper.java:135)
05-03 10:32:26.665: E/AndroidRuntime(9845):     at android.os.HandlerThread.run(HandlerThread.java:61)

我想这是我项目中的清单文件中的一个问题

下面是我的声明代码:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.d4a.tobiasnow"
    android:versionCode="2"
    android:versionName="1.1" >

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="19" />

     <permission
        android:name="com.android.launcher3.permission.PRELOAD_WORKSPACE"
        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
        android:protectionLevel="system|signature" />
    <permission
        android:name="com.android.launcher.permission.INSTALL_SHORTCUT"
        android:description="@string/permdesc_install_shortcut"
        android:label="@string/permlab_install_shortcut"
        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
        android:protectionLevel="dangerous" />
    <permission
        android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"
        android:description="@string/permdesc_uninstall_shortcut"
        android:label="@string/permlab_uninstall_shortcut"
        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
        android:protectionLevel="dangerous" />
    <permission
        android:name="com.d4a.tobiasnow.permission.READ_SETTINGS"
        android:description="@string/permdesc_read_settings"
        android:label="@string/permlab_read_settings"
        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
        android:protectionLevel="normal" />
    <permission
        android:name="com.d4a.tobiasnow.permission.WRITE_SETTINGS"
        android:description="@string/permdesc_write_settings"
        android:label="@string/permlab_write_settings"
        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
        android:protectionLevel="normal" />
    <permission
        android:name="com.d4a.tobiasnow.permission.RECEIVE_LAUNCH_BROADCASTS"
        android:protectionLevel="signature" />

    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.SET_WALLPAPER" />
    <uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.BIND_APPWIDGET" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />
    <uses-permission android:name="com.android.launcher3.permission.READ_SETTINGS" />
    <uses-permission android:name="com.android.launcher3.permission.WRITE_SETTINGS" />
    <uses-permission android:name="com.android.launcher3.permission.RECEIVE_LAUNCH_BROADCASTS" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.SET_WALLPAPER" />
    <uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.CALL_PRIVILEGED" />
    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_CALL_LOG" />
    <uses-permission android:name="android.permission.WRITE_CALL_LOG" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


    <application
        android:name="com.d4a.tobaisnow.LauncherApplication"
        android:hardwareAccelerated="true"
        android:configChanges="orientation"
        android:icon="@mipmap/ic_launcher_home"
        android:label="@string/application_name"
        android:largeHeap="@bool/config_largeHeap"
        android:supportsRtl="true" >
        <activity
            android:name="com.d4a.tobaisnow.Launcher"
            android:clearTaskOnLaunch="true"
            android:launchMode="singleTask"
             android:screenOrientation="portrait"
            android:stateNotNeeded="true"
            android:theme="@style/Theme"
            android:windowSoftInputMode="adjustPan" >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.MONKEY" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.d4a.tobaisnow.ToggleWeightWatcher"
            android:enabled="@bool/debug_memory_enabled"
            android:icon="@mipmap/ic_launcher_home"
            android:label="@string/toggle_weight_watcher"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
          <activity android:name="dialer2.DialerActivity"
                      android:screenOrientation="portrait">
        </activity>

          <activity android:name="dialer2.FragmentTab3"
                      android:screenOrientation="portrait">
        </activity>
        <activity
            android:name="com.d4a.tobaisnow.WallpaperPickerActivity"
            android:finishOnCloseSystemDialogs="true"
            android:icon="@mipmap/ic_launcher_wallpaper"
            android:label="@string/pick_wallpaper"
            android:process=":wallpaper_chooser"
            android:theme="@style/Theme.WallpaperCropper" 
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.SET_WALLPAPER" />

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

        <activity
            android:name="com.d4a.tobaisnow.WallpaperCropActivity"
            android:finishOnCloseSystemDialogs="true"
            android:icon="@mipmap/ic_launcher_wallpaper"
            android:label="@string/crop_wallpaper"
            android:process=":wallpaper_chooser"
            android:theme="@style/Theme.WallpaperCropper" 
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.service.wallpaper.CROP_AND_SET_WALLPAPER" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:mimeType="image/*" />
            </intent-filter>
        </activity>

        <!-- Debugging tools -->
        <activity
            android:name="com.d4a.tobaisnow.MemoryDumpActivity"
            android:enabled="@bool/debug_memory_enabled"
            android:excludeFromRecents="true"
            android:icon="@mipmap/ic_launcher_home"
            android:label="@string/debug_memory_activity"
            android:theme="@android:style/Theme.NoDisplay" 
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <service
            android:name="com.d4a.tobaisnow.MemoryTracker"
            android:enabled="@bool/debug_memory_enabled" >
        </service>

        <!-- Intent received used to prepopulate the default workspace. -->
        <receiver
            android:name="com.d4a.tobaisnow.PreloadReceiver"
            android:permission="com.android.launcher3.permission.PRELOAD_WORKSPACE" >
            <intent-filter>
                <action android:name="com.android.launcher3.action.PRELOAD_WORKSPACE" />
            </intent-filter>
        </receiver>

        <!-- Intent received used to install shortcuts from other applications -->
        <receiver
            android:name="com.d4a.tobaisnow.InstallShortcutReceiver"
            android:permission="com.android.launcher3.permission.INSTALL_SHORTCUT" >
            <intent-filter>
                <action android:name="com.android.launcher3.action.INSTALL_SHORTCUT" />
            </intent-filter>
        </receiver>

        <!-- Intent received used to uninstall shortcuts from other applications -->
        <receiver
            android:name="com.d4a.tobaisnow.UninstallShortcutReceiver"
            android:permission="com.android.launcher3.permission.UNINSTALL_SHORTCUT" >
            <intent-filter>
                <action android:name="com.android.launcher3.action.UNINSTALL_SHORTCUT" />
            </intent-filter>
        </receiver>

        <!-- New user initialization; set up initial wallpaper -->
        <receiver
            android:name="com.d4a.tobaisnow.UserInitializeReceiver"
            android:exported="false" >
            <intent-filter>
                <action android:name="android.intent.action.USER_INITIALIZE" />
            </intent-filter>
        </receiver>
        <receiver android:name="com.d4a.tobaisnow.PackageChangedReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_CHANGED" />
                <action android:name="android.intent.action.PACKAGE_REPLACED" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />

                <data android:scheme="package" >
                </data>
            </intent-filter>
        </receiver>

        <!-- The settings provider contains Home's data, like the workspace favorites -->
        <provider
            android:name="com.d4a.tobaisnow.LauncherProvider"
            android:authorities="com.d4a.tobiasnow.settings"
            android:exported="true"
            android:readPermission="com.d4a.tobiasnow.permission.READ_SETTINGS"
            android:writePermission="com.d4a.tobiasnow.permission.WRITE_SETTINGS" />

        <meta-data
            android:name="android.nfc.disable_beam_default"
            android:value="true" />
    </application>

</manifest>

我将项目中的com.android.launcher3包重命名为: com.d4a.tobaisnow

我不知道问题出在哪里,我已经在谷歌上搜索了5个小时,但没有运气

任何帮助/反馈都将是惊人的!

提前感谢

克里斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-03 17:19:14

在第526行的Runnable中,您正在LauncherModel中崩溃(大概)。当然,我们并不真正知道这段代码是什么,因为您决定不提供导致崩溃的代码。

但是,从堆栈跟踪中,您似乎试图使用com.android.launcher3.LauncherProvider ContentProvidercom.android.launcher3.permission.WRITE_SETTINGS权限对此进行了保护。在标准的Launcher3构建中,signatureOrSystem。您没有由Launcher3应用的签名键签名,而且您的应用程序可能没有安装在系统分区上。因此,您不能持有此权限。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30016466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档