前言
今天在适配Android6.0时遇到两个问题,比较典型,总结下来,以备后用 -- 好脑子不如烂笔头!
问题一
关于使用Intent进行Service跳转时,需要指定包名,即你想要在哪个应用下启动Service。
Intent intent = new Intent();
intent.setPackage("com.XXX.XXX");
startService(intent);
括号里面需要填写启动Service的应用包名。
注意,启动活动的时候不需要,只有在启动Service的时候才需要setPackage。
问题二
描述
如果你的app/build.gradle文件中targetSdkVersion >= 23,那么在创建通知时,AS将会提示setLatestEventInfo方法找不到了。如下所示:
那么进入到Notification.java会发现,setLatestEventInfo方法已经被打上了弃用的标志,而且官方建议使用Builder代替。如下所示:
解决
解决过程比较艰辛,并不像想象中的顺利,一开始我选择的是使用 Notification.Builder(),相信大多数人也是这么选择的,但是在写完后,发现builder.setPriority等属性不能使用,并且运行报错。通过Google,修改成了NotificationCompat.Builder()方法,问题得到解决!代码如下:
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setWhen(notification.when)
.setSmallIcon(notification.icon)
.setPriority(notification.priority)
.setTicker(notification.tickerText)
.setNumber(notification.number)
.setColor(notification.color)
.setSound(notification.sound, notification.audioStreamType)
.setDefaults(notification.defaults)
.setVibrate(notification.vibrate)
.setDeleteIntent(notification.deleteIntent);
// now apply the latestEventInfo fields
if (title != null) {
builder.setContentTitle(title);
}
if (message != null) {
builder.setContentText(message);
}
builder.setContentIntent(contentIntent);
notificationManager.notify(random.nextInt(), builder.build());
参考
http://blog.csdn.net/liyx2018/article/details/51332158
https://stackoverflow.com/questions/32450449/setlatesteventinfo-cannot-be-resolved
http://www.houfukude.tk/2013/05/23/Notification%E4%BD%BF%E7%94%A8%E8%AE%B0%E5%BD%95