android 11 新功能 抢先体验
新功能和API
应用进程退出原因
获取应用近期任何进程终止原因
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ApplicationExitInfo> list =activityManager.getHistoricalProcessExitReasons(getPackageName(), 0, 5);
Log.d(TAG, "info size = " + list.size());
for (ApplicationExitInfo info : list) {
Log.d(TAG, " info " + info.toString() + "code = " + info.getReason());
}
相机
在打开相机设备时可以关闭系统震动、铃声
CameraDevice device;
device.setCameraAudioRestriction();
device.getCameraAudioRestriction();
AUDIO_RESTRICTION_NONE; AUDIO_RESTRICTION_VIBRATION;
AUDIO_RESTRICTION_VIBRATION_SOUND;
并发使用相机
CameraManager cameraManager;
Set<Set<String>> cameraIds = cameraManager.getConcurrentCameraIds();
Map<String, SessionConfiguration > cameraIdAndSessionConfig;
cameraManager.isConcurrentSessionConfigurationSupported(cameraIdAndSessionConfig);
行为变更:所有应用
一、隐私设置
1、强制分区储存:在android 10 中开始使用分区储存,但是可以在配置文件中通过设置requestLegacyExternalStorage 设为 true 以停用分区存储的应用,在 android 11 开始强制使用分区储存。
2、单次授权:每当应用请求与位置信息、麦克风或者相机相关权限时,面向用户的权限对话框会包含仅限这一次选项。如果用户在对话框中选择此选项,系统会向应用授予临时的单次权限,具体时长取决于应用的行为和用户的操作:
a、应用的Activity可见时,应用可以访问相关的数据。
b、如果用户将应用转为后台运行,应用可以在短时间内继续访问相关数据
c、如果您在 Activity 可见时启动了一项前台服务,并且用户随后将您的应用转到后台,那么您的应用可以继续访问相关数据,直到该前台服务停止
d、如果用户撤消单次授权(例如在系统设置中撤消),无论您是否启动了前台服务,应用都无法访问相关数据。与任何权限一样,如果用户撤消了应用的单次授权,应用进程就会终止。
3、自动重置未使用的应用的权限:如果用户数月未使用授予的权限,系统会通过自动重置用户已授予应用的运行时敏感权限来保护用户数据。此操作与用户在系统设置中查看权限并将应用的访问权限级别更改为拒绝的做法效果一样。如果应用遵循了有关在运行时请求权限的最佳做法,那么您不必对应用进行任何更改。这是因为,当用户与应用中的功能互动时,您应该会验证相关功能是否具有所需权限。
4、权限对话框的可见性:一再拒绝某项权限表示用户希望“不再询问
5、软件包可见性
Android 11 更改了应用查询用户已在设备上安装的其他应用以及与之交互的方式。使用 <queries> 元素,应用可以定义一组自身可访问的其他软件包。通过告知系统应向您的应用显示哪些其他软件包,此元素有助于鼓励最小权限原则。此外,此元素还可帮助 Google Play 等应用商店评估应用为用户提供的隐私权和安全性。
需要注意的是除了利用<queries>定义需要查询的应用之后,有些类型应用对本应用天然是可见的,这些类型应用包含以下:
a、应用本身
b、系统的一些应用,比如媒体提供者,提供一些基础服务的应用。(使用命令adb shell dumpsys package queries 可以查询)
c、安装本应用的应用。
d、绑定或者开启应用里面的服务的应用。
e、使用应用里面的内容提供者的应用。
f、应用被授予 URI 权限去访问有内容提供者的应用(例如:B 应用有内容提供者, A 应用被授予相应的 URI访问 B应用的内容提供者, 那么B应用对 A应用来说是可见的)
g、接收你是应用输入的应用,例如:输入法。
功能和API
一:设备控件:Android R 新增加了ControlsProviderService,可用于提供连接外部设备的控件,这些控件显示在电源菜单的设备控制器下。
更新了媒体控件的显示方式。媒体控件显示于快捷设置旁。来自多个应用的会话排列在一个可滑动的轮播界面中,其中包括在手机本地播放的会话流、远程会话流(例如在外部设备上检测到的会话或投射会话)以及可继续播放的以前的会话(按上次播放的顺序排列)。
二、用户无需启动相关应用即可在轮播界面中重新开始播放以前的会话。当播放开始后,用户可按常规方式与媒体控件互动。
媒体控制:
三、屏幕:
更好地支持瀑布屏
Android 11 提供了一些 API 以支持瀑布屏,这是一种无边框的全面屏。这种显示屏被视为刘海屏的变体。现有的 DisplayCutout.getSafeInset…() 方法现在会返回能够避开瀑布区域以及刘海的安全边衬区。如需在瀑布区域中呈现您的应用内容,请执行以下操作:
调用 DisplayCutout.getWaterfallInsets() 以获取瀑布边衬区的精确尺寸。
将窗口布局属性 layoutInDisplayCutoutMode 设为 LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS,以允许窗口延伸到屏幕各个边缘上的刘海和瀑布区域。您必须确保刘海或瀑布区域中没有重要的内容
合页角度传感器和可折叠设备(折叠屏?)
使用 Android 11,可以通过以下方法使运行在采用合页式屏幕配置的设备上的应用能够确定合页角度:提供具有 TYPE_HINGE_ANGLE 的新传感器,以及新的 SensorEvent,后者可以监控合页角度,并提供设备的两部分之间的角度测量值。您可以使用这些原始测量值在用户操作设备时执行精细的动画显示。
四、5G
在需要用到网络来上传数据时,通过监听网络的状况来选择合适的数据策略,android 11 中增加了对5G 网络的支持
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
connectivityManager.registerDefaultNetworkCallback(new ConnectivityManager.NetworkCallback(
){
@Override
public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {
super.onCapabilitiesChanged(network, networkCapabilities);
//如果值为 true,则网络视为不按流量计费。
boolean unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) ||
networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED);
networkCapabilities.getLinkDownstreamBandwidthKbps();
networkCapabilities.getLinkUpstreamBandwidthKbps();
}
});
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(new PhoneStateListener(){
@Override
public void onDisplayInfoChanged(@NonNull TelephonyDisplayInfo telephonyDisplayInfo) {
super.onDisplayInfoChanged(telephonyDisplayInfo);
int type = telephonyDisplayInfo.getNetworkType();
boolean is5G = type == OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO
|| type == OVERRIDE_NETWORK_TYPE_NR_NSA
|| type == OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE;
}
}, PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);
通过以上代码可以检测当前网络是否按流量计费、网络的带宽(上行、下行)、以及是否是 5G 网络。
本文地址:https://blog.csdn.net/johndon_forever/article/details/109367886
下一篇: UE4 制作技巧,优化学习笔记
推荐阅读
-
Android 11加入新功能:长期不用的APP自动关闭敏感权限
-
Win11首个预览版推送!教你如何抢先体验Win11
-
Android 11 R新功能曝光:智能飞行模式可不切断蓝牙音频
-
新功能亮点满满 Windows 10 21H1抢先体验
-
下一代Windows系统!Windows 11抢先体验
-
Android 11新功能曝光:手机未正确放在无线充电板上时会提示
-
谷歌在Android 11测试新功能:将大大提高手机续航时间
-
微软将推Windows 11二月体验包:可运行Android应用
-
Windows 11重磅新功能抢先玩:超千款安卓应用/游戏、国内用户只能先看
-
Android 11 首个开发者预览版新功能抢先看