我想从启动器db获取数据。
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
启动器是手机制造商负责的应用程序。权威并不总是"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结构被保留,你可以使用相同的查询
对于我的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