<
Android 6 到 15 版本适配 202409整理更新
>
上一篇

Compose学习笔记 状态 state
下一篇

Windows 登录microsoft账户 出错 0x800704cf

整理对 Android 版本的重点适配,尽量跟上 Android 正式版的更新

Android 6 M 23

Android 7 N 24

Android 8 O 26

dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
//8.0之后的权限申请要用下面这种方式,所以这两个权限都要加上
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />

Android 9 P 28

WifiRttManager rtt = (WifiRttManager)Context.getSystemService(Context.WIFI_RTT_RANGING_SERVICE);

// manifest标签里添加
<uses-feature android:name="android.hardware.wifi.rtt" />
//允许在Android P上使用反射而不受任何限制
implementation 'me.weishu:free_reflection:1.2.0'
 
//在App.java中加入即可:
Reflection.unseal(this);

Android 10 Q 29

Intent fullScreenIntent = new Intent(this, CallActivity.class);
PendingIntent fullScreenPendingIntent = PendingIntent.getActivity(this, 0,
        fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT);
 
NotificationCompat.Builder notificationBuilder =
        new NotificationCompat.Builder(this, CHANNEL_ID)
    .setSmallIcon(R.drawable.notification_icon)
    .setContentTitle("Incoming call")
    .setContentText("(919) 555-1234")
    //以下为关键的3行
    .setPriority(NotificationCompat.PRIORITY_HIGH)
    .setCategory(NotificationCompat.CATEGORY_CALL)
    .setFullScreenIntent(fullScreenPendingIntent, true);
    
NotificationManager notifyManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notifyManager.notify(notifyId, builder.build());

// if targetVersion>=29
// AndroidManifest中
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />

Android 11 R 30

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
     metrics = activity.getWindowManager().getCurrentWindowMetrics();
     int width = metrics.getBounds().width();
     int height = metrics.getBounds().height();
 }
<uses-permission android:name="android.permission.READ_PHONE_STATE"
android:maxSdkVersion="29" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />

Android 12 S 31 / 12L Sv2 32

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    UsageStatsManager manager = (UsageStatsManager) getSystemService(USAGE_STATS_SERVICE);
    if(manager != null) manager.getAppStandbyBucket();
}

如果需要测试 APP 在严格限制域的表现,谷歌也提供了相对应的命令来进行模拟

adb shell am set-standby-bucket PACKAGE_NAME restricted

这个只需要做充分的测试即可,毕竟你也做不了什么,避免被限制的方法很简单,让用户停在你的APP界面以及更经常的使用你的 APP, 这应该是所有应用开发者一直在研究的问题吧

Android 13 T 33

<!-- Devices running Android 12L (API level 32) or lower  -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />

<!-- Devices running Android 13 (API level 33) or higher -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
// Register ActivityResult handler
val requestPermissions = registerForActivityResult(RequestMultiplePermissions()) { results ->
    // Handle permission requests results
    // See the permission example in the Android platform samples: https://github.com/android/platform-samples
}

// Permission request logic
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    requestPermissions.launch(arrayOf(READ_MEDIA_IMAGES, READ_MEDIA_VIDEO))
} else {
    requestPermissions.launch(arrayOf(READ_EXTERNAL_STORAGE))
}

Android 14 U 34

<!-- Devices running Android 12L (API level 32) or lower  -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />

<!-- Devices running Android 13 (API level 33) or higher -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />

<!-- To handle the reselection within the app on devices running Android 14
     or higher if your app targets Android 14 (API level 34) or higher.  -->
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
// Register ActivityResult handler
val requestPermissions = registerForActivityResult(RequestMultiplePermissions()) { results ->
    // Handle permission requests results
    // See the permission example in the Android platform samples: https://github.com/android/platform-samples
}

// Permission request logic
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
    requestPermissions.launch(arrayOf(READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_VISUAL_USER_SELECTED))
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    requestPermissions.launch(arrayOf(READ_MEDIA_IMAGES, READ_MEDIA_VIDEO))
} else {
    requestPermissions.launch(arrayOf(READ_EXTERNAL_STORAGE))
}

Android 15 V 35


权限文档

https://developer.android.com/reference/android/Manifest.permission

Top
Foot