【问题标题】:android shortcut, access launcher dbandroid快捷方式,访问启动器数据库
【发布时间】:2012-01-20 00:57:48
【问题描述】:

我想从启动器数据库中获取数据。

final String AUTHORITY = "com.android.launcher2.settings";  
final Uri CONTENT_URI = Uri.parse("content://" + 
                        AUTHORITY + "/favorites?notify=true");

Cursor c = contentResolver.query(uri, columns, null, null,
            null);

<uses-permission 
        android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
<uses-permission 
        android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>
<uses-permission 
        android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission 
        android:name="com.android.launcher.permission.WRITE_SETTINGS" />

但据说在logcat中:

Failed to find provider info for com.android.launcher2.settings

【问题讨论】:

标签: android database sqlite launcher


【解决方案1】:

启动器是手机制造商负责的应用程序。 权威机构并不总是"com.android.launcher2.settings"。 手机制造商可以自己重写。 它可以是 "com.android.twlauncher" 或其他任何内容,具体取决于 Java 包。

您需要通过搜索声明读/写权限"com.android.launcher.permission.READ_SETTINGS""com.android.launcher.permission.WRITE_SETTINGS"的提供程序来检索正确的权限。

这是一个示例代码:

static String getAuthorityFromPermission(Context context, String permission){
    if (permission == null) return null;
    List<PackageInfo> packs = context.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);
    if (packs != null) {
        for (PackageInfo pack : packs) { 
            ProviderInfo[] providers = pack.providers; 
            if (providers != null) { 
                for (ProviderInfo provider : providers) { 
                    if (permission.equals(provider.readPermission)) return provider.authority;
                    if (permission.equals(provider.writePermission)) return provider.authority;
                } 
            }
        }
    }
    return null;
}

一般情况下,ContentProvider 和 DB 结构会保留,您可以使用相同的查询。

【讨论】:

    【解决方案2】:

    对于我的 Nexus 5 设备需要不同的权限

    <uses-permission android:name="com.google.android.launcher.permission.READ_SETTINGS"/>
    <uses-permission android:name="com.google.android.launcher.permission.WRITE_SETTINGS"/>
    

    授权字符串是com.google.android.launcher.settings

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 2021-09-05
      • 2011-10-23
      • 2013-06-24
      • 2012-12-31
      • 1970-01-01
      相关资源
      最近更新 更多