mucchinのAndroid戦記

Androidアプリからブラウザのブックマークの追加・更新・削除方法

Androidアプリから、ブラウザのブックマークを追加、更新、削除する方法は?

前回、Androidアプリからブラウザのブックマークを取得する方法を紹介しました。
Androidアプリからブラウザのブックマークの取得方法

自分で作ったAndroidアプリから、ブラウザのブックマークを追加させたいという事もあるかもしれません。
例えば、無料で自分のAndroidアプリを使用させてあげる代わりに、自分のサイトをブックマークさせるとか?(スパムみたいな事はやめましょう。)
もしくは単にブックマークエディターみたいなAndroidアプリを作るとか。

今回は、ブックマークへ追加する方法を紹介します。

ブラウザのブックマークに追加する方法

以下のようなサンプルコードになります。


Browser.saveBookmark(this,”senki”,”https://android.roof-balcony.com”);


Browserクラスに定義されているfinal staticメソッドですので、単純に上記をコールしてやればOKです。
第一引数はContext型ですが、自分(Activity)を指定すればいいので、thisとしています。Activityとは別クラスとして実装した場合は、適した変数にしましょう。
第二引数はタイトル、第三引数はURLです。
ただ、何も画面に表示されず、すんなりとブックマークへ登録できるわけではありません。
saveBookmarkメソッドを実行すると、以下のような画面が表示されます。
Androidアプリからブラウザのブックマークの追加方法


APIリファレンスによると、「AddBookmarkアクティビティ」と呼ぶらしいですね。
この画面ではタイトルの編集もURLの変更も、ユーザの思うままですし、キャンセルも出来ます。
セキュリティ面やら色々考えたら、ユーザフレンドな仕様だし、その方がいいかもしれませんが・・・。

上記のような画面を経由せず、ブックマークを保存する手段は無いのか!?
Browserクラスには、ブックマークを保存するメソッドは、saveBookmark()メソッドしか無さそうです。
saveBookmarkメソッド以外で追加してやる方法を検証してみました。
ブックマークとはいえど、ローカルのデータベースで保持しています。
直で操作できるのでは!?と思い、試してみました。
以下のようなコードです。


ContentValues values = new ContentValues();
values.put(Browser.BookmarkColumns.BOOKMARK,”1″);
values.put(Browser.BookmarkColumns.URL, “https://android.roof-balcony.com”);
values.put(Browser.BookmarkColumns.TITLE, “android”);
getContentResolver().insert(Browser.BOOKMARKS_URI, values);


上記コードを実装して動かすと、SecurityExceptionが発生しました。
ログを見て、パーミッションの設定で、com.android.browser.permission.WRITE_HISTORY_BOOKMARKSを追加して再度動かしてみました。
すると、見事ブックマークの追加に成功してしまいました。

Browserクラスでは、ブックマークの削除や更新が出来そうなメソッドは存在しないようです。
ですが、先ほどの方法で追加が出来たという事は、削除も更新も出来るのでは・・・と思い、早速試してみました。


スポンサーリンク




ブラウザのブックマークを削除する方法

まず削除です。


getContentResolver().delete(
   Browser.BOOKMARKS_URI,
   Browser.BookmarkColumns.TITLE + ” = ‘android'”,null);


上記のコードで、先ほど追加したブックマークが消えました。

ブラウザのブックマークを更新する方法

更新も同じく、以下のようなコードを試すと、


ContentValues values = new ContentValues();
values.put(Browser.BookmarkColumns.BOOKMARK,”1″);
values.put(Browser.BookmarkColumns.URL, “https://android.roof-balcony.com”);
values.put(Browser.BookmarkColumns.TITLE, “android”);
getContentResolver().update(
    Browser.BOOKMARKS_URI,
    values,Browser.BookmarkColumns.TITLE + ” = ‘senki'”,null);


上記ですと、タイトルが「senki」のレコードが、valuesで設定した値に更新できました。


AndroidのAPIリファレンスを見ると、Browserクラスでは、ブックマーク関連の書込みはsaveBookmark()メソッドしか存在しません。
これは何故でしょうね。
getContentResolver()で取得したContentResolverのinsert、update、deleteを使っての書込み、更新が直接行う方法はもしかして、やってはいけない裏技なのでしょうか?
深い意味はなくて、ただ提供していないだけでしょうか?

理由はよくわかりませんが、とにかく、悪意を持ってユーザのブックマークを消しちゃったり、書き換えてしまったり、Androidアプリでスパム行為はやめましょう!


スポンサーリンク

URL :
TRACKBACK URL :

Leave a Reply

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

CAPTCHA


*

Return Top