mucchinのAndroid戦記

Androidアプリからブラウザのブックマークの取得方法

Androidアプリからブラウザのブックマークを取得する方法は?

自分で作成するAndroidアプリから、ブラウザのブックマークにアクセスする方法があります。
以前紹介した通話ログと同じく、コンテントプロバイダという機構が使えます。


コンテントプロバイダを使用するときの基本用法は、getContentResolver().query()メソッドを使用します。
但し、ブラウザのブックマークを取得する際は、この方法ではなく、Browserクラスに実装されているメソッドを利用する方が簡単です。

ブラウザのブックマークを取得する方法

まずは、getContentResolver().query()メソッドを使ったときのサンプルコードを紹介します。
この方法はAPIリファレンスを見て、こんな感じかな?と試してみたコードです。
APIリファレンスにも、定数が掲載されているだけで、詳細説明は何も書かれていません。
以下のような感じです。


String[] projection = new String[]{
  Browser.BookmarkColumns.BOOKMARK,
  Browser.BookmarkColumns.CREATED,
  Browser.BookmarkColumns.DATE,
  Browser.BookmarkColumns.FAVICON,
  Browser.BookmarkColumns.TITLE,
  Browser.BookmarkColumns.URL,
  Browser.BookmarkColumns.VISITS
};

Cursor c =
  getContentResolver().query(
       Browser.BOOKMARKS_URI, projection, null, null, null);

if(c.moveToFirst()){
  do{
    //レコード毎の処理
  }while(c.moveToNext());
}
c.close();


getContentResolver().query()メソッドで、「Browser.BOOKMARKS_URI」というURIを指定します。
このURIで取得したレコードを見ると、ブックマークだけでなく、ヒストリー(一度アクセスしたURL)まで取得できてしまいます。
Browser.BookmarkColumns.BOOKMARKというカラムは、それがブックマークかどうかを示すフラグであろうと思います。
ですので、ブックマークだけを取得したい場合は、getContentResolver().query()メソッドの第三引数で条件を指定してやる必要があります。(上記サンプルコードではnullにしています。)
しかし、APIリファレンスには、Browser.BOOKMARKS_URIで取得するレコードの各カラムの説明が何も書いてませんので、この方法は望ましいやり方ではないのだと思います。


スポンサーリンク




というわけで、正しく最も簡単にブックマークの情報だけを取得する方法があります。

Browser.getAllBookmarks()メソッド

Browserクラスに、getAllBookmarks()というメソッドがあります。
ブックマーク取得の場合は、この方法を使用します。
それでは、サンプルコードを見てみましょう。
先ほどの例を書き換えます。


Cursor c = Browser.getAllBookmarks(getContentResolver());
if(c.moveToFirst()){
  do{
    //レコード毎の処理
  }while(c.moveToNext());
}
c.close();


Browser.getAllBookmarks()メソッドを使うと、かなりスッキリしますね。
この方法ですと、履歴などのURLは取れず、ブックマークで登録しているURLの一覧が取得できます。
レコードは、一つ目のカラムにURLが、二つ目のカラムにIDが入っている状態ですので、URLの文字列を取得したい場合は、下記のように取得します。


String url = c.getString(0);
もしくは
String url =
  c.getString(c.getColumnIndex(Browser.BookmarkColumns.URL));


前者の方法は、もしテーブル仕様が変わって、カラムの位置がずれてしまうなんて事が発生したら、正しく取れなくなります。
後者の方法はくどい書き方かもしれませんが、こちらの方がいいかもしれません。
ただ、ブックマークが格納されるテーブル仕様が変わるなんてあるのかどうかわかりませんので、前者でもいいかもしれないですね。
そもそもカラムの名前が変えられてしまったら後者でも同じですし・・・。まぁそれは無いか。

なお、Androidからのブラウザのブックマーク取得には、パーミッションの設定が必要です。
ブックマーク読み出し・書き込みのパーミッション

次回は、ブックマークの追加方法について説明します。


スポンサーリンク

URL :
TRACKBACK URL :

Comments & Trackbacks

  • Comments ( 0 )
  • Trackbacks ( 1 )

No commented yet.

Leave a Reply

*
*
* (公開されません)

CAPTCHA


*

Return Top