-
蓝牙
在安卓10以上,蓝牙扫描需要更精确的位置权限。
即:从仅仅ACCESS_COARSE_LOCATION到ACCESS_FINE_LOCATION安卓12又有了新的变化:
官方描述
总的来说是增加了三个权限:
android.permission.BLUETOOTH_SCAN
android.permission.BLUETOOTH_ADVERTISE
android.permission.BLUETOOTH_CONNECT
这三个权限是针对android12;而之前的权限根据官方说法12就不需要了,为了兼容低版本最好在清单文件中的对应权限后添加android:maxSdkVersion=“30”;如:
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
但是我在实际代码中实验,android.permission.BLUETOOTH是不能添加这个maxSdkVersion来限制的,不然会连接不到设备,logcat提示
java.lang.SecurityException: UID 10412 / PID 20343 lacks permission android.permission.BLUETOOTH
同时官方说不需要精确位置权限ACCESS_FINE_LOCATION,我实验该项还是必须,不然会没有扫描结果。
-
广播
安卓8以上,无法接收隐式发送的静态注册广播
(TIPS:静态注册也失效,除了一些开关机类型;是为了防止app滥用广播。对耗电进行优化)
即:从
Intent intent = new Intent("com.example.broadcasttest.MyRecriver");
sendBroadcast(intent);
到
Intent intent = new Intent();
intent.setComponent(new ComponentName(MainActivity.this,MyReceiver.class));
sendBroadcast(intent);
或者
Intent intent = new Intent(MainActivity.this,MyReceiver.class);
sendBroadcast(intent);
注:以上都是本应用通讯,想要跨应用
intent.setComponent(new ComponentName("com.example.broadcasttest2","com.example.broadcasttest2.AnotherMyReceiver"));
第一个参数是包名,第二个是类的全名称(目标应用的)
- HTML明文:
直接使用URI的网址明文会出现错误
是因为从Android 9.0(API级别28)开始,默认情况下禁用明文支持。因此http的url均无法在webview中加载
解决方案:
在清单文件中加一句"android:usesCleartextTraffic=“true”
- 音频
安卓6+【?】需要动态申请该权限 RECORD_AUDIO
if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.RECORD_AUDIO)!=PackageManager.PERMISSION_GRANTED) {
Log.e("permisson: ","should open Audio");
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.RECORD_AUDIO},
REQUEST_CODE_AUDIO_PERMISSIONS);
} else {
Log.e("permisson: ","has Audio permission");
}