NotificationでIntentをActivityに渡して起動するときに注意するあれこれ

メモ

PendingIntentの情報が更新されない

getActivityで取得している第3引数を確認しましょう。この値が0だと更新されません。

PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

起動時にIntent情報を取得したい

onNewIntent()を使って取得しましょう。この時、activityのlunchModeがsingleTopを含む単一アプリにしておかないと別のActivityが立ち上がって取得出来ません。

public class NotificationIntentTestAcitivty extends Activity {
	@Override
	protected void onNewIntent(Intent intent) {
		super.onNewIntent(intent);
		// intentの情報を取得してうんちゃらかんちゃら
	}
}

Intentで起動された場合も起動時に取得したものと同じ事をしたい

onCreate()でonNewIntent()を呼び出しましょう。

public class NotificationIntentTestAcitivty extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// getIntentでintentを取得してonNewIntetを起動
		this.onNewIntent(getIntent());
	}

	@Override
	protected void onNewIntent(Intent intent) {
		super.onNewIntent(intent);
		// intentの情報を取得してうんちゃらかんちゃら
	}
}

まとめ

以上、知ってる人には当たり前だけど忘れないようにメモ。

ネーミングに困ったので適当に名前を出す奴を作った

名前つけるのって難しい。なんか適当に文字をくっつけてとかやっても語感が悪いの嫌いだから語感だけで決めたかった。ということで、語感が良くなる法則を適当に考えてみると繰り返すとなんか良くなると思う。「まぐまぐ」とか「ぱるる」とかそんな感じね。これを適当な文字列で出力してインスピレーションをわかすために適当に作った。

var str = 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ';

// random
var base = '';
for(i=0 ; i< 4 ; i++) {
	var start = Math.floor(Math.random() * str.length);
	base = base + str.substring(start, start + 1);
}
console.log(base);

// 繰り返し
var r = '';
for(i=0 ; i<2 ; i++) {
	r = r + base.substring(i, i+1);
}
for(i=0 ; i<2 ; i++) {
	r = r + base.substring(i, i+1);
}
console.log(r);

var r = '';
for(i=1 ; i<3 ; i++) {
	r = r + base.substring(i, i+1);
}
for(i=1 ; i<3 ; i++) {
	r = r + base.substring(i, i+1);
}
console.log(r);

var r = '';
for(i=2 ; i<4 ; i++) {
	r = r + base.substring(i, i+1);
}
for(i=2 ; i<4 ; i++) {
	r = r + base.substring(i, i+1);
}
console.log(r);

// 続き
var r = '';
for(i=0 ; i<4 ; i++) {
	if(i<2) {
		r = r + base.substring(0, 1);
	} else {
		r = r + base.substring(i, i+1);
	}
}
console.log(r);

var r = '';
for(i=0 ; i<4 ; i++) {
	if(i>0 && i<3) {
		r = r + base.substring(1, 2);
	} else {
		r = r + base.substring(i, i+1);
	}
}
console.log(r);

var r = '';
for(i=0 ; i<4 ; i++) {
	if(i>1 && i<4) {
		r = r + base.substring(2, 3);
	} else {
		r = r + base.substring(i, i+1);
	}
}
console.log(r);

気が向いたらもうちょっと改良するかも。