了解 Android R:最新版本中的新功能和改进

一、可变的屏幕刷新率

在 Android R 中,增加了对可变屏幕刷新率的支持,为了提高用户的体验和节省电量。

通过 WindowManager API 中添加了新的 API,应用可以查询显示器是否支持可变的刷新率,如果支持,应用可以请求不同的刷新率。例如,如果应用正在播放视频,则可以请求高刷新率,如果应用主要是显示静止内容,可以请求低刷新率。显示器会根据应用的请求调整刷新率,以达到更好的用户体验和能源效率。

Display.Mode mode = display.getMode();
if (mode.getPhysicalRefreshRate() >= 90) {
    // If refresh rate is sufficiently high, switch to 90Hz refresh rate
    mode = new Display.Mode(mode.getModeId(), 1080, 2340, 90);
    display.requestMode(mode);
}
else {
    // If refresh rate isn't good enough, switch to 60Hz refresh rate
    mode = new Display.Mode(mode.getModeId(), 1080, 2340, 60);
    display.requestMode(mode);
}

二、全新的权限管理

在之前的版本中,应用开发者可以在应用安装时就申请所有需要的权限。然而这可能会导致用户被迫授权一些他们不想给予的权限,或者在必要时缺乏对权限的掌控。在 Android R 中,全新的权限管理功能可以授予用户更多的控制权。

如果应用需要使用敏感权限,如访问位置或相机,应用将必须要经过用户授权才能使用这些权限。此外,Android R 引入了“一次性权限”,这是一种一次性的,用完即销毁的权限,使得应用能够获得临时访问适当数据的权限,但接下来不再需要这个权限。

// 申请 ACCESS_FINE_LOCATION 权限
if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.ACCESS_FINE_LOCATION)
        != PackageManager.PERMISSION_GRANTED) {

    // 如果没授权,那么就需要申请授权
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.ACCESS_FINE_LOCATION)) {
        // 给出提示信息,告诉用户没有这个权限时 APP 不能正常使用
    } else {
        // 否则直接申请授权
        ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                MY_PERMISSIONS_REQUEST_LOCATION);
    }
}

三、无限的无线连接

在 Android R 中,Google 引入了一种名为“连接感知”的新技术,它可以让 Android 设备更好地管理多种无线连接的同时,提供了更好的连接质量和保障用户隐私。

例如,当你正走在街上,Wi-Fi 信号强度正在不断变化。如果你正在通过这些 Wi-Fi 网络进行数据传输,这可能会导致应用程序的延迟和停顿。 Android R 可以识别这些变化,并在连接更好的 Wi-Fi 网络时自动转换到该连接。

ConnectivityManager cm = getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest request = new NetworkRequest.Builder()
        .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
        .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
        .build();
cm.registerNetworkCallback(request, new ConnectivityManager.NetworkCallback() {
    @Override
    public void onAvailable(Network network) {
        // 在这里处理网络变更的操作,例如:更新 WebView 连接
    }
});

四、增强的隐私保护

Android R 中增强了隐私保护功能。例如,应用程序现在需要使用一个新的读取外部存储权限,以访问用户外部存储中的文件,这意味着应用程序不能更轻易地访问用户的个人数据。此外,Android R 还支持应用程序访问私有区域中的共享文件。

Android R 还包括一个应用程序许可来限制应用于特定数据的访问。例如,如果一个音频应用需要访问用户电话状态,这不再需要使用 READ_PHONE_STATE 权限,但内部 API 可以通过使用应用程序许可权进行访问。

if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_PHONE_STATE)
        != PackageManager.PERMISSION_GRANTED) {

    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_PHONE_STATE)) {
        // 给出提示信息,告诉用户没有这个权限时音频应用的功能可能会受限
    } else {
        ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.READ_PHONE_STATE},
                MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);
    }
}
else {
    // 音频应用可以直接访问电话状态
}

五、更好的企业设备管理

企业设备的安全性是个很大的话题,并且在 Android R 中得到了一些重大的改进。Android R 减少了许多攻击点,例如,至少需要设备锁来访问企业资产和 Quick Settings 权限。Android R 也支持针对企业定制的自定义设置、应用列表和网络管理。

Android R 通过增加 Admin API,使得企业可以对设备进行更好的管理。企业管理员可以限制工作个人数据的访问,或在用户退出企业时清空容器,这些都为企业设备管理提供了更多的选择。

private static final String TAG = "PolicyManagerSample";
private DevicePolicyManager mDpm;
private ComponentName mProfileOwner;

public void createProfile(View view) {
    Intent intent = new Intent();
    intent.setAction(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE);
    intent.putExtra(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME,
            getPackageName());
    intent.putExtra(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME,
            new ComponentName(this, PolicyManagerReceiver.class));
    startActivityForResult(intent, REQUEST_PROVISION_MANAGED_PROFILE);
}

public void enableCameras(View view) {
    mDpm.setCameraDisabled(mProfileOwner, false);
    Log.i(TAG, "Cameras enabled");
}

public void disableCameras(View view) {
    mDpm.setCameraDisabled(mProfileOwner, true);
    Log.i(TAG, "Cameras disabled");
}

总结

Android R 提供了许多新的功能和改进,以满足不断变化的用户需求和进步的技术趋势。其中一些功能包括可变的屏幕刷新率、全新的权限管理、无线连接和隐私保护的增强。企业设备管理方面也得到了很大的改进。开发者和用户都有了更好的体验和保障。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/237687.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:06
下一篇 2024-12-12 12:06

相关推荐

  • Android ViewPager和ScrollView滑动冲突问题

    Android开发中,ViewPager和ScrollView是两个常用的控件。但是当它们同时使用时,可能会发生滑动冲突的问题。本文将从多个方面介绍解决Android ViewPa…

    编程 2025-04-28
  • Android如何点击其他区域收起软键盘

    在Android应用中,当输入框获取焦点弹出软键盘后,我们希望能够点击其他区域使软键盘消失,以提升用户体验。本篇文章将说明如何实现这一功能。 一、获取焦点并显示软键盘 在Andro…

    编程 2025-04-28
  • Android Studio HUD 实现指南

    本文将会以实例来详细阐述如何在 Android Studio 中使用 HUD 功能实现菊花等待指示器的效果。 一、引入依赖库 首先,我们需要在 build.gradle 文件中引入…

    编程 2025-04-27
  • Android和Vue3混合开发方案

    本文将介绍如何将Android和Vue3结合起来进行混合开发,以及其中的优势和注意事项。 一、环境搭建 在进行混合开发之前,需要搭建好相应的开发环境。首先需要安装 Android …

    编程 2025-04-27
  • Android Java Utils 可以如何提高你的开发效率

    Android Java Utils 是一款提供了一系列方便实用的工具类的 Java 库,可以帮助开发者更加高效地进行 Android 开发,提高开发效率。本文将从以下几个方面对 …

    编程 2025-04-27
  • Android JUnit测试完成程序自动退出决方法

    对于一些Android JUnit测试的开发人员来说,程序自动退出是一个经常面临的困扰。下面从多个方面给出解决方法。 一、检查测试代码 首先,我们应该仔细检查我们的测试代码,确保它…

    编程 2025-04-25
  • Android Activity启动流程

    一、Activity概述 Android应用程序是由许多Activity组成的。一个Activity代表一个屏幕上的窗口。用户与应用程序交互时,Activity会接收用户的输入并处…

    编程 2025-04-25
  • Android单元测试详解

    一、单元测试概述 单元测试是指对软件中的最小可测试单元进行检查和验证。在Android开发中,单元测试是非常重要的一环,可以保证代码的质量、稳定性以及可维护性。 在Android开…

    编程 2025-04-25
  • Android WebView加载本地HTML

    一、介绍 Android WebView是一个内置的浏览器,它允许开发人员在应用中嵌入网页。使用WebView可以轻松地在应用程序中显示本地或远程的HTML内容。本篇文章将重点讲述…

    编程 2025-04-24
  • Android Wakelock详解

    一、什么是Android Wakelock? 在Android应用开发中,Wakelock被广泛应用于保持屏幕或CPU处于唤醒状态,以便应用程序可以继续执行后台任务,直到任务完成。…

    编程 2025-04-24

发表回复

登录后才能评论