1、java.net.UnknownServiceException: CLEARTEXT communication to xxx not permitted by network
原因:Android P( 9.0 对应API28 )以后版本要求默认使用加密连接,接收和发送流量不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议。推荐本地和服务器使用https(最好的方案)。也可以将targetSdkVersion降回到27(当然不是好方法)。还有另一个解决方法:
1、在res目录下新建xml目录,新增一个network_security_config.xml文件如下
2、在AndroidManifest.xml文件下application标签下增加属性
android:networkSecurityConfig="@xml/network_security_config"
2、Android 8.0+ 服务和通知的变更问题
Android O(8 API 26、27)对后台服务进行了限制
前台服务:在通知一栏中有ongoing的Notification,当服务终止时,notification也会消失。需要调用starForeground函数。
后台服务:基本没有可见形式
A8更新:在后台运行的应用对后台服务访问受到限制
应用无法使用静态注册专门针对此应用的大部分隐式广播。
A8应用在不允许其创建后台服务的情况下不能使用starService()函数,允许的情况下可以。
应用在后台时可以starForegroundservice()将开启一个前台服务,并在创建服务后5秒内调用该服务的starForeground()函数。
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
context.startForegroundService(intent);
} else {
context.startService(intent);
}26版本以上需在5秒内调用starForeground(1,notification),
另外通知渠道需要添加channelId才可以,如下:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
String id ="channel_001";
String name ="下载通知";
NotificationChannel mChannel =new NotificationChannel(id, name, NotificationManager.IMPORTANCE_LOW);
manager.createNotificationChannel(mChannel);
notification =new Notification.Builder(this,id)
.setContentTitle("Weather Has Changed")
.setContentText(weather.basic.cityName+" "+weather.now.temperature+"*C"
+" "+weather.basic.update.updateTime+" "+weather.now.more.info)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.logo)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.id.bing_pic_img))
.build();