我正在尝试使用Android Browser.BOOKMARKS_URI从我的应用程序(https://play.google.com/store/apps/details?id=com.elementique.web)中删除设备书签。
它在大多数设备上都可以正常工作,但在某些设备上不起作用:-(
在这些设备上,尝试使用书签会导致
java.lang.IllegalArgumentException: Unknown URL content://browser/bookmarks
我现在知道,Boookmark Uri可以不同于AOSP的默认值(即“ content:// browser / bookmarks”)。
问题:
如何获得给定设备的正确书签Uri?
我已经“收集”了以下URI
private static final Uri BOKKMARKS_DEFAULT = Browser.BOOKMARKS_URI; // = Uri.parse("content://browser/bookmarks")
private static final Uri BOKKMARKS_URI_CHROME = Uri.parse("content://com.android.chrome.browser/bookmarks");
private static final Uri BOKKMARKS_URI_SAMSUNG_S_ = Uri.parse("content://com.sec.android.app.sbrowser.browser/bookmarks");
它是一种“列出”设备上所有可用内容URI(content:// ...)的方法吗?如果是,我可以列出它们并搜索“ / bookmarks”字符串的出现并尝试使用此URI。
注意事项:
如果应用程序无法获得“有效的”书签URI(例如,我自己的书签数据库,因为我的应用程序确实需要书签功能),则我目前正在创建后备机制。
有没有一种方法可以“列出”设备上所有可用的内容URI(content:// ...)?
Play商店中有一个名为“ Content Provider Helper”的开源APP ,可以列出content://
设备上所有可用的URI。它用PackageManager.GET_PROVIDER
以下是搜索所有可用内容提供商的相应类:
SearchProviderTask.java
package com.jensdriller.contentproviderhelper.task;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.net.Uri;
public class SearchProvidersTask extends DialogAsyncTask<Uri, Void, List<String>> {
public SearchProvidersTask(Context context) {
super(context);
}
@Override
protected List<String> doInBackground(Uri... params) {
List<String> contentProviders = new ArrayList<String>();
try {
PackageManager pm = mContext.getPackageManager();
for (PackageInfo pack : pm.getInstalledPackages(PackageManager.GET_PROVIDERS)) {
ProviderInfo[] providers = pack.providers;
if (providers != null) {
for (ProviderInfo provider : providers) {
contentProviders.add("content://" + provider.authority);
}
}
}
} catch (Exception e) {
// PackageManager has died?
mException = e;
}
// Sort alphabetically and ignore case sensitivity
Collections.sort(contentProviders, new Comparator<String>() {
@Override
public int compare(String lhs, String rhs) {
return lowerCase(lhs).compareTo(lowerCase(rhs));
}
private String lowerCase(String s) {
return s.toLowerCase(Locale.getDefault());
}
});
return contentProviders;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句