My Photo

« 2012年7月新アニメ雑感 | Main | Androidアプリ開発メモ066:Android SDK tools Rev.20 で変わった事 »

July 11, 2012

Androidアプリ開発メモ065:ライブフォルダ

「ライブフォルダはコンテンツプロバイダの単なるリアルタイムビュー」とドキュメントに書いてある。
表示される情報を見るまでにホーム画面から最低で2クリック必要なので、いまいち便利さがわからない。表示中にデータに変更があるとリアルタイムで表示が更新されるそうだが、それだけ?

アクティビティでは onCreate() でインテントのアクションが ACTION_CREATE_LIVE_FOLDER かどうかを判定し、ACTION_CREATE_LIVE_FOLDER だった場合は setResult() で RESULT_OK と必要なもの(情報の取得先のURIなど)をセットしたインテントを返す。

package com.example.livefolderex;

import android.os.Bundle;
import android.provider.LiveFolders;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;

public class LiveFolderEx extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		// インテントのアクションがACTION_CREATE_LIVE_FOLDERかどうかを判定
		Intent intent = getIntent();
		String action = intent.getAction();
		if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)) {
			setResult(
					RESULT_OK,
					creatLiveFolder(
							this, "LiveFolderEx", R.drawable.icon,
							LiveFolders.DISPLAY_MODE_LIST));
		} else {
			setResult(RESULT_CANCELED);
		}
		finish();
	}

	private Intent creatLiveFolder(
			Context context, String name, int icon, int displayMode) {
		
		Intent intent = new Intent();
		intent.setData(LiveFolderProvider.CONTACTS_URI);
		intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME, name);
		intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON,
				Intent.ShortcutIconResource.fromContext(context, icon));
		intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE, displayMode);
		return intent;
	}
}

コンテンツプロバイダの方はquery()で表示されるデータを返す。
下記は上記のアクティビティで使っている LiveFolderProvider の抜粋。

// URL
public static final String AUTHORITY = "com.example.livefolderex.test";
public static final Uri CONTACTS_URI = Uri.parse("content://" + AUTHORITY + "/test");

@Override
public boolean onCreate() {
	return true;
}

/** カーソルの列名 */
private static final String[] CURSOR_COLUMNS = new String[] {
	BaseColumns._ID,
	LiveFolders.NAME,
	LiveFolders.DESCRIPTION,
	LiveFolders.INTENT,
	LiveFolders.ICON_PACKAGE,
	LiveFolders.ICON_RESOURCE
};

@Override
public Cursor query(Uri uri, String[] projection, String selection,
		String[] selectionArgs, String sortOrder) {
	// クエリー実行時に呼ばれる
	MatrixCursor mc = new MatrixCursor(CURSOR_COLUMNS);
	
	// マトリックスカーソルへの行追加
	mc.addRow(new Object[] { 
			0,						// ID
			"Webページの表示",		// 名前
			"Webページを表示する",	// 詳細,
			Uri.parse("http://www.google.com/"),	// インテント
			getContext().getPackageName(),	//アイコンパッケージ
			R.drawable.icon
	});
	
	mc.addRow(new Object[] {
			1,							// ID
			"ダイアラーの表示",			// 名前
			"ダイアラーを表示する",		// 詳細
			Uri.parse("tel:117"),			// インテント
			getContext().getPackageName(),	// アイコンパッケージ
			R.drawable.icon
	});
	return mc;
}

AndroidManifest.xml にはアクティビティのインテントフィルタに "android.intent.action.CREATE_LIVE_FOLDER" を、カテゴリに "android.intent.category.DEFAULT" を設定する。これでホーム画面を長押ししてライブフォルダを作成を選んだときの選択肢にこのアプリが表示されるようになる。
本に載っていたサンプルアプリではprovider要素にandroid:multiprocess属性があって値がtrueだった。これは必要なんだろうか?なくてもライブフォルダは表示されるが。
下記は抜粋(application要素)。

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".LiveFolderEx"
        android:label="@string/title_activity_live_folder_ex" >
        <intent-filter>
            <action android:name="android.intent.action.CREATE_LIVE_FOLDER" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    
    <provider
        android:name="LiveFolderProvider"
        android:authorities="com.example.livefolderex.test">
    </provider>
</application>

参考ページ:
f. ライブフォルダ - ソフトウェア技術ドキュメントを勝手に翻訳
Android Developers Blog: Live folders

« 2012年7月新アニメ雑感 | Main | Androidアプリ開発メモ066:Android SDK tools Rev.20 で変わった事 »

Androidアプリ開発」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/55174844

Listed below are links to weblogs that reference Androidアプリ開発メモ065:ライブフォルダ:

« 2012年7月新アニメ雑感 | Main | Androidアプリ開発メモ066:Android SDK tools Rev.20 で変わった事 »

May 2017
Sun Mon Tue Wed Thu Fri Sat
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof