第 5 章 グラフィックス 77
6.6 組み込みコンテントプロバイダー
6.6. 組み込みコンテントプロバイダー 111
ルバーは、アクティビティーやサービスが持っている、
ContentResolver getContentResolver()
というメソッドを呼び出すことによって取得することができます。
次にしなければならないことは、コンテントリゾルバーに対して検索を実行して、その結果か ら構成されるカーソルを取得することです。検索は、コンテントリゾルバーが持っている、
Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
というメソッドを呼び出すことによって実行することができます。たとえば、
Cursor c = getContentResolver().query(
Browser.BOOKMARKS_URI, new String[] {
Browser.BookmarkColumns.URL, Browser.BookmarkColumns.TITLE },null, null, null);
というようにgetContentResolverとqueryを呼び出すことによって、すべてのタイトルとURL から構成されるカーソルを取得することができます。
6.6.5 ブックマークを取得するアプリケーションの例
それでは、ブラウザーのブックマークを取得するアプリケーションを作ってみましょう。
まず最初に、次のようなプロジェクトを作成してください。
Project name getbm
Application name ブックマークの取得 Package name org.example.getbm Create Activity GetBookmarkActivity
次に、main.xmlを次のように書き換えてください。
レイアウトXMLの例 main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
次に、GetBookmarkActivity.javaを次のように書き換えてください。
プログラムの例 GetBookmarkActivity.java package org.example.getbm;
import android.app.Activity;
import android.os.Bundle;
import android.provider.Browser;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.database.Cursor;
public class GetBookmarkActivity extends Activity { /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getBookmark();
6.6. 組み込みコンテントプロバイダー 113 }
private void getBookmark() {
Cursor c = getContentResolver().query(
Browser.BOOKMARKS_URI, new String[] {
Browser.BookmarkColumns.URL, Browser.BookmarkColumns.TITLE },null, null, null);
if (c.moveToFirst()) {
int ititle = c.getColumnIndexOrThrow(
Browser.BookmarkColumns.TITLE);
int iurl = c.getColumnIndexOrThrow(
Browser.BookmarkColumns.URL);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1);
final ListView listview = (ListView) findViewById(R.id.listview);
do {adapter.add("[" + c.getString(ititle) + "]" + c.getString(iurl));
} while (c.moveToNext());
listview.setAdapter(adapter);
}c.close();
} }
最後に、Androidマニフェストのmanifest要素の子供として、
<uses-permission
android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
という要素を書き加えてください。
これで完成です。実行してみてください。そうすると、ブックマークがリストビューによって 表示されるはずです。
6.6.6 ブックマークを保存する方法
ブックマークを保存する方法は、ブックマークを取得する方法よりも簡単で、
android.provider.Browser というクラスの中で定義されている、
void saveBookmark(Context c, String title, String url) という静的メソッドを呼び出すだけです。
6.6.7 ブックマークを保存するアプリケーションの例
それでは、ブックマークを保存するアプリケーションを作ってみましょう。
まず最初に、次のようなプロジェクトを作成してください。
Project name savebm
Application name ブックマークの保存 Package name org.example.savebm Create Activity SaveBookmarkActivity
次に、main.xmlを次のように書き換えてください。
レイアウトXMLの例 main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
<TableLayout>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="1"
<TableRow>>
<TextView android:text="タイトル"/>
<EditText android:id="@+id/title"/>
</TableRow>
<TableRow>
<TextView android:text="URL"/>
<EditText android:id="@+id/url"/>
</TableRow>
</TableLayout>
<Button android:id="@+id/save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存"
/>
</LinearLayout>
次に、SaveBookmarkActivity.javaを次のように書き換えてください。
プログラムの例 SaveBookmarkActivity.java package org.example.savebm;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.provider.Browser;
import android.widget.Button;
import android.widget.EditText;
public class SaveBookmarkActivity extends Activity { /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button save = (Button) findViewById(R.id.save);
save.setOnClickListener(new OnClickListener() { public void onClick(View v) {
saveBookmark();
}); } }
private void saveBookmark() {
EditText title = (EditText) findViewById(R.id.title);
EditText url = (EditText) findViewById(R.id.url);
Browser.saveBookmark(this,
title.getText().toString(), url.getText().toString());
} }
最後に、Androidマニフェストのmanifest要素の子供として、
<uses-permission
android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/>
という要素を書き加えてください。
これで完成です。実行すると、二つのエディットテキストとひとつのボタンが表示されますの で、上のエディットテキストにタイトル、下のエディットテキストにURLを入力して、ボタン をクリックしてください。そうすると、確認のためのダイアログが表示されますので、問題がな
115 ければ[OK]のボタンをクリックしてください。そうすると、入力したタイトルとURLがブッ クマークに保存されるはずですので、保存されたかどうかを、先ほどのアプリケーションかまた はブラウザーを使って確認してください。