8

Я пытаюсь использовать Android Browser.BOOKMARKS_URI в закладки CRUD устройства внутри моего приложения (https://play.google.com/store/apps/details?id=com.elementique.web)Android Browser.BOOKMARKS_URI не работает на всех устройствах. Как узнать правильный uri для данного устройства?

Это работает отлично на большинстве устройств, но не работает на какой-то :-(

На тех, устройства, пытаясь использовать закладки приводит к

java.lang.IllegalArgumentException: Unknown URL content://browser/bookmarks 

теперь я понимаю, что Boookmark Uri может отличаться от значения по умолчанию AOSP. (например, «содержание: // браузер/закладки»)

Вопрос:

Как я могу получить правильный Закладка 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 (содержание: // ...) на устройствах? Если да, я могу перечислить их и найти появление строки «/ bookmarks» и попробовать с этим URI.

Примечание:

Я в настоящее время в процессе создания запасного механизма, если приложение не может получить «рабочую» закладку URI (то есть мой собственный Bookmark DB, так как мне нужна функция закладки в моем приложении)

ответ

4

Есть ли способ, чтобы 'список' все доступное содержимого URI (содержание: // ...) на устройствах?

Там есть приложение с открытым исходным кодом под названием «Content Provider Helper» в Play Store, что можно перечислить все имеющиеся 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; 
    } 
} 

Github: https://github.com/jenzz/ContentProviderHelper

+0

Спасибо! Кажется, почти то, что я ищу. Я просто должен быть в состоянии фильтровать contentProvider, чтобы сохранить закладку. Я не думаю, что мы можем сделать лучше, поэтому, с моей точки зрения, это правильный ответ. Спасибо :-) – Pascal

+0

Надеюсь, это поможет вам. И если вам удалось собрать больше URI браузера, пожалуйста, поделитесь также :-), это наверняка сэкономит время для всех нас. –

0

Это запрос к поиску закладок;

cursor = mContentResolver.query(Browser.BOOKMARKS_URI, BOOKMARKS_PROJECTION, 
       Browser.BookmarkColumns.BOOKMARK + " == 1" + 
        " AND LOWER(" + Browser.BookmarkColumns.TITLE + ") LIKE ?", 
       new String[] { searchText + "%" }, 
       Browser.BookmarkColumns.TITLE + " ASC"); 
+3

Вопрос «Как узнать правильный uri для данного устройства? " – Pascal