我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 的音乐播放器的源代码。
这是其音乐播放器服务的片段。
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);
此代码中使用了远程视图。它有两个TextViews
。我通过添加一个按钮来修改代码,并在按钮单击时执行操作。在每个平台上一切正常。
同样的事情,我想要我的应用程序。但是,在 2.2 上,它看起来就像我在上面的屏幕截图中显示的那样。我认为这是因为白色文本和按钮所以尝试改变按钮和文本的颜色,但没有运气。据我了解,我发现的唯一一件事是远程视图在 Android 2.2 上没有被夸大(就我而言)。我不明白为什么通知没有在 Android 2.x 平台上正确显示。