我在我的应用中使用MediaPlayer
。我在我的应用程序中添加了带有媒体播放器控件(如上一个,下一个和停止按钮)的Ongoing Notification
,以便用户无需前往应用程序即可访问这些控件。它在平台上看起来很好4.x。以下是Android 4.2.2上的通知截图。Android:自定义通知外观问题
但是,在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());
。
Remote Views从API级别1开始可用。并且,它也得到了很好的支持。我在某处读过,在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平台上正常显示。
NotificationCompat可帮助您构建一个适用于所有API级别的通知,但这并不意味着它允许您在旧版本中使用新功能。旧版本无法处理自定义布局或按钮,因此在实践中,您需要定义3种布局:消费通知,未扩展的新通知(针对您尚未花费的API级别以及用户或系统何时收到通知)和旧的通知(只是文本)。当然,这取决于您的最低API级别。如果您决定使用minsdk = 14(ICS),则无需考虑旧版本的通知。 – Teovald
@Nitish给了我一个建议。我使用RemoteView构建通知大视图来控制播放/暂停,就像这个链接一样(http://stackoverflow.com/questions/14508369/how-to-create-a-notification-similar-to-play-music-app-from - 谷歌)一切正常,但当我点击设备后退按钮,并从应用程序点击事件(播放/暂停/转发/关闭)按钮不起作用。请帮助我。 –
@HelalKhan嗨,请在Stackoverflow上创建一个新问题。没有看代码,很难说是什么原因。 – Nitish