android开发中遇到的问题

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();

你可能感兴趣的:(android开发中遇到的问题)