适配Android6.0的两点总结

前言

今天在适配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方法找不到了。如下所示:

111.png

那么进入到Notification.java会发现,setLatestEventInfo方法已经被打上了弃用的标志,而且官方建议使用Builder代替。如下所示:

适配Android6.0的两点总结_第1张图片
222.png

解决

解决过程比较艰辛,并不像想象中的顺利,一开始我选择的是使用 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

你可能感兴趣的:(适配Android6.0的两点总结)