Androidでブラウザのブックマークを取得したい(けどできない)
結論
- Android 6.0でブラウザのブックマークがプログラムから取得できなくなった
- Android 5系までは取得できた
- AndroidのChromeでできるのはGoogleアカウント経由でのimport/exportのみ
6.0以降での挙動
API level 23以上ではブックマークを取得できなくした旨がAndroid 6.0 Changes | Android Developersの「Browser Bookmark Changes」セクションに明記されています。ちょっと長いけど引用。
This release removes support for global bookmarks. The android.provider.Browser.getAllBookmarks() and android.provider.Browser.saveBookmark() methods are now removed. Likewise, the READ_HISTORY_BOOKMARKS and WRITE_HISTORY_BOOKMARKS permissions are removed. If your app targets Android 6.0 (API level 23) or higher, don’t access bookmarks from the global provider or use the bookmark permissions. Instead, your app should store bookmarks data internally.
仕組みが削除されてしまったのでどうしようもなし。裏技とかもありません。
API level 23以上でもビルドエラーにならないようにする代替コードはこちら。
android - some issue with buildToolsVersion 23.0.1 - Stack Overflow
あくまでビルドエラー回避であって、Android6.0以降でブックマークが取得できるわけではないことに注意。API level 23以上でビルドするけど5.0以前にはブックマーク取得機能を提供したい、みたいなときだけ使えます。
5.0以前のやり方
コンテントプロバイダ経由で取得できます。
標準ブラウザのUriはBrowser.BOOKMARKS_URI
です。Chromeのブックマークを明示的に取るなら Uriはcontent://com.android.chrome.browser/bookmarks
になります。Chromeがデフォルトブラウザに指定してある場合はBrowser.BOOKMARKS_URI
でも取れるみたい。
具体的な取得方法は以下のサイトが参考になります。
AndroidのChromeでimport/exportしたい
2017年10月時点では
- AndroidのChromeからブックマークを直接import/exportすることはできない
- Googleアカウントに対してブックマークを同期することはできる
- PCのChromeはブックマークのimport/exportができる
となっています。 端末のrootを取ればやりようはあるかもしれませんが、一般的じゃないのでここでは深堀りしません。
Googleアカウント(つまりクラウド側)にブックマークを同期して問題ないなら、PC経由でimport/exportできます。
クラウドにブックマークを預けるのはなんか不安、という場合は、Chromeのブックマーク機能を使うのではなくブックマーク管理系のアプリを使う必要がある、ということですね。
アプリからブックマークにアクセスできないのはまだしも、Chromeからexportすらできないのは不便だなあ。
Googleからしたら「いいから俺たちを信用しろよ。そのほうが便利だろ?」という感じなんでしょうか。ブックマークは貴重なデータ源だから囲い込みしたい、ということなのかもしれません。
関連(するかもしれない)記事
おススメ