アプリで使用MediaPlayer
しています。Ongoing Notification
ユーザーがこれらのコントロールにアクセスするためにアプリに移動する必要がないように、アプリにメディア プレーヤー コントロール (前、次、停止ボタンなど) を追加しています。プラットフォーム4.x では問題ないように見えます。Android 4.2.2 での通知のスクリーンショットを次に示します。
しかし、Android 2.2 では、次のようになります。
私のコードは次のとおりです。
private Notification generateNotification() {
Log.d(TAG, "generateNotification called");
Intent actionIntent = new Intent(getApplicationContext(),
AartiActivity.class);
PendingIntent pi = PendingIntent.getActivity(getApplicationContext(),
0, actionIntent, PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews mNotificationView = new RemoteViews(getPackageName(),
R.layout.notification_view);
NotificationCompat.Builder builder = new NotificationCompat.Builder(
getApplicationContext());
builder.setSmallIcon(R.drawable.icon);
builder.setContent(mNotificationView);
builder.setOngoing(true);
builder.setTicker("Aarti Sangrah");
builder.setContentIntent(pi);
mNotificationView.setImageViewResource(R.id.imgAppIc, R.drawable.icon);
mNotificationView.setTextViewText(R.id.txtAartiPlaying, mediaName);
return builder.build();
}// generateNotification
そして、startForeground(1, generateNotification());
onPrepared ()を呼び出しました。
リモート ビューはAPI レベル 1 以降で利用できます。また、これも十分にサポートされています。どこかで読んだことがありますが、Honeycomb より前はサポートされていませんでした。ただし、Android 2.x を搭載したいくつかのデバイスでは、この機能を利用できます。また、これを確認するためにAndroid 2.2のMusic Playerのソースコードをこちらから見ました。
これは、そのMusic Player Serviceからのスニペットです。
RemoteViews views = new RemoteViews(getPackageName(),
R.layout.statusbar);
views.setOnClickPendingIntent(R.id.btnTest, PendingIntent
.getActivity(getApplicationContext(), 0,
new Intent(getApplicationContext(),
MusicBrowserActivity.class),
PendingIntent.FLAG_UPDATE_CURRENT));
views.setImageViewResource(R.id.icon,
R.drawable.stat_notify_musicplayer);
if (getAudioId() < 0) {
// streaming
views.setTextViewText(R.id.trackname, getPath());
views.setTextViewText(R.id.artistalbum, null);
} else {
String artist = getArtistName();
views.setTextViewText(R.id.trackname, getTrackName());
if (artist == null || artist.equals(MediaStore.UNKNOWN_STRING)) {
artist = getString(R.string.unknown_artist_name);
}
String album = getAlbumName();
if (album == null || album.equals(MediaStore.UNKNOWN_STRING)) {
album = getString(R.string.unknown_album_name);
}
views.setTextViewText(
R.id.artistalbum,
getString(R.string.notification_artist_album, artist,
album));
}
Notification status = new Notification();
status.contentView = views;
status.flags |= Notification.FLAG_ONGOING_EVENT;
status.icon = R.drawable.stat_notify_musicplayer;
status.contentIntent = PendingIntent.getActivity(this, 0,
new Intent("com.android.music.PLAYBACK_VIEWER")
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK), 0);
startForeground(PLAYBACKSERVICE_STATUS, status);
このコードではリモート ビューが使用されています。2つありTextViews
ました。ボタンを追加してコードを変更し、ボタンのクリック時にアクションも実行しました。すべてのプラットフォームですべてが正常に機能しました。
同じこと、私は自分のアプリケーションで欲しい。しかし、2.2 では、上記のスクリーンショットのように見えます。テキストとボタンの色が白いためだと思い、ボタンとテキストの色を変更してみましたが、うまくいきませんでした。私が理解している限り、私が理解した唯一のことは、Android 2.2でリモートビューが膨らまないことです(私の場合)。Android 2.x プラットフォームで通知が正しく表示されない理由がわかりません。