targetSDKVersion=26適合8.0以上のいくつかのピットについて
3324 ワード
最近、プロジェクトの必要性をためらって、targetSDKVersionを26にアップグレードする必要があります.コードでできたことだと思っていましたが、テストで発見された2つの穴がありました.
一:システム弾窓(懸濁窓)が発効しない
プロジェクトにSYSTEMを使用しましたALERT_WINDOW 権限弾きましたサービスにdialogがセットされているTYPE_SYSTEM_ALERTのサスペンション窓、使いにくいことに気づきました.解決策:
適用する場合
どうぞ
置換
二:通知が発効しない
プロジェクトには通知通知が使われており、昇格後8.0の機械でも使いにくくなっています.APIを調べてみると、元の
一:システム弾窓(懸濁窓)が発効しない
プロジェクトにSYSTEMを使用しましたALERT_WINDOW 権限弾きましたサービスにdialogがセットされているTYPE_SYSTEM_ALERTのサスペンション窓、使いにくいことに気づきました.解決策:
適用する場合
SYSTEM_ALERT_WINDOW
パーミッションは、次のウィンドウ・タイプのいずれかを使用して、他のアプリケーションおよびシステム・ウィンドウの上にアラート・ウィンドウを表示しようとします.TYPE_PHONE
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_SYSTEM_OVERLAY
TYPE_SYSTEM_ERROR
どうぞ
TYPE_APPLICATION_OVERLAY
置換
dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY));
二:通知が発効しない
プロジェクトには通知通知が使われており、昇格後8.0の機械でも使いにくくなっています.APIを調べてみると、元の
new NotificationCompat.Builder(this) 8.0 , new NotificationCompat.Builder(this,String channelId)
channelId :
channelを生成しない場合は、idを直接入力しても有効ではありません.String id = "channel_1"; String description = "123"; int importance = NotificationManager.IMPORTANCE_LOW; NotificationChannel mChannel = new NotificationChannel(id, "123", importance); mChannel.setDescription(description); mChannel.enableLights(true); mChannel.setLightColor(Color.BLUE); mChannel.enableVibration(true); mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400}); notificationManager.createNotificationChannel(mChannel);
だから26の学友まで8.0の机种に适合する时必ずこの2つの问题に注意して、は、それぞれ設定されていると判断する.if(Build.VERSION.SDK_INT>=26){}else{}