我在我的应用中使用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
然后,我在onPrepared()中致电startForeground(1, generateNotification());
。
自API级别1以来Remote Views可用。此外,它也得到了很好的支持。我在某地读过,在Honeycomb之前没有得到支持。但是,在具有Android 2.x的多个设备上,此功能可用。另外,为了检查这一点,我查看了来自here的Android 2.2音乐播放器的源代码。
此处是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);
远程视图已在此代码中使用。它有两个TextViews
。我通过向其添加按钮来修改代码,并且还在按钮单击时执行了操作。在每个平台上都能正常运行。
同样的,我想要我的申请。但是,在2.2上,它看起来就像我在屏幕截图中所示。我认为这是因为白色文本和按钮所以试图改变按钮和文字的颜色,但没有运气。据我所知,只有我想到的是远程视图在Android 2.2上没有膨胀(在我的情况下)。我不明白为什么通知在Android 2.x平台上没有正确显示。
答案 0 :(得分: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);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
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);
mNotificationView.setTextColor(R.id.txtAartiPlaying, getResources()
.getColor(android.R.color.holo_orange_light));
return builder.build();
} else {
mNotificationView.setTextViewText(R.id.txtAartiPlaying, mediaName);
mNotificationView.setTextColor(R.id.txtAartiPlaying, getResources()
.getColor(android.R.color.holo_orange_light));
Notification statusNotification = new Notification();
statusNotification.contentView = mNotificationView;
statusNotification.flags |= Notification.FLAG_ONGOING_EVENT;
statusNotification.icon = R.drawable.icon;
statusNotification.contentIntent = PendingIntent.getActivity(this,
0, new Intent(getApplicationContext(), AartiActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK), 0);
return statusNotification;
}
}// generateNotification
但是,我很安静。支持包中提供了NotificationCompat.Builder,它是为了向后兼容而提供的。但是,就我而言,它仅适用于Honeycomb及以上版本。根据{{3}}:
并非所有通知功能都可用于特定版本,即使设置它们的方法位于支持库类NotificationCompat.Builder中也是如此。例如,依赖于扩展通知的操作按钮仅显示在Android 4.1及更高版本上,因为扩展通知本身仅适用于Android 4.1及更高版本。
但是,我不认为,这适用于我的情况。 NotificationCompat.Builder适用于远程视图,但没有在2.x上工作(至少在我的情况下,可能是我错了或遗漏了一些东西)。如果有人在这方面有任何信息或资源,请分享,以便我能弄清楚我的错误。