新特性与行为变更 -- Android 13(T OS,API Level:33)

新特性与行为变更 -- Android 13(T OS,API Level:33),第1张

无论应用采用何种目标 SDK 版本,Android 13(API 级别 33)都允许用户从抽屉式通知栏中停止前台服务。这项新功能称为 FGS 任务管理器,它会显示当前正在运行前台服务的应用列表。此列表的标签为使用中的应用。每个应用旁边都有一个停止按钮。

注意:当用户按您应用旁边的停止按钮时,系统会停止您的整个应用,而不仅仅是正在运行的前台服务。

利用 JobScheduler,应用可使用 JobInfo.Builder.setPrefetch() 将特定作业标记为“预提取”作业,这意味着,理想情况下这些作业应该在应用下一次启动前提前一点运行,以提升用户体验。过去,JobScheduler 仅使用该信号让预提取作业有机会使用免费或多余的数据。

在 Android 13 中,系统现在会尝试确定应用下次启动的时间,并根据该估算值运行预提取作业。应用应尝试使用预提取作业来完成他们想要在下次应用启动前完成的任何工作。

Android 13(API 级别 33)引入了电池资源利用率,它为系统提供了多种方法来更好地管理设备电池续航时间:

Android 13(API 级别 33)引入了新的运行时通知权限:POST_NOTIFICATIONS。此更改有助于用户专注于最重要的通知。

注意:与媒体会话以及自行管理通话的应用相关的通知不受此行为变更的影响。

如果您的应用允许用户将敏感内容(例如密码或xyk信息)复制到剪贴板,则必须在调用 ClipboardManager#setPrimaryClip() 之前向 ClipData 的 ClipDescription 添加一个标志。添加此标志可阻止敏感内容出现在内容预览中。

如需标记敏感内容,请向 ClipDescription 添加一个布尔型 extra。无论应用的目标 API 级别如何,所有应用都应这么做。

如果您的应用使用已废弃的 android:sharedUserId 属性,并且不再依赖于该属性的功能,您可以将 android:sharedUserMaxSdkVersion 属性设置为 32,这个新属性会告知系统,您的应用不再依赖于共享用户 ID。如果您的应用声明 android:sharedUserMaxSdkVersion 并且首次安装在搭载 Android 13 或更高版本的设备上,则应用的行为就像您从未定义过 android:sharedUserId 一样。更新后的应用仍会使用现有的共享用户 ID。

共享用户 ID 会在软件包管理器中导致具有不确定性的行为。您的应用应使用适当的通信机制(例如服务和 content provider),在共享组件之间实现互 *** 作性。

注意:如果您已在清单中定义了 android:sharedUserId 属性,请不要将其移除。这样做会导致应用更新失败。

如果用户拒绝通知权限,他们仍会在前台服务 (FGS) 任务管理器中看到与这些前台服务相关的通知,但不会在抽屉式通知栏中看到这些通知。

在以前的 Android 版本中,用户需要向您的应用授予 ACCESS_FINE_LOCATION 权限,应用才能完成与热点相关的多个常见 Wi-Fi 用例、Wi-Fi 直连、Wi-Fi RTT 等。

由于用户很难将位置信息权限与 Wi-Fi 功能相关联,因此 Android 13(API 级别 33)在 NEARBY_DEVICES 权限组中引入了新的运行时权限,适用于管理设备与附近 Wi-Fi 接入点连接情况的应用。此权限 (NEARBY_WIFI_DEVICES) 可满足这些 Wi-Fi 用例。

只要您的应用不会通过 Wi-Fi API 推导物理位置,那么当您以 Android 13 或更高版本为目标平台并使用 Wi-Fi API 时,就可以请求 NEARBY_WIFI_DEVICES 而不是 ACCESS_FINE_LOCATION。

注意:仅当您调用 Wi-Fi API 时,此更改才会影响您的应用。

如果您的应用以 Android 13 为目标平台,您必须请求一个或多个新权限,而不是 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 权限。如果用户之前向您的应用授予了 READ_EXTERNAL_STORAGE 权限,系统会自动向您的应用授予每个新权限。

注意:如果您的应用只需要访问图片、照片和视频,请考虑使用照片选择器,而不是声明 READ_MEDIA_IMAGES和 READ_MEDIA_VIDEO 权限。

注意:您无需再声明 WRITE_EXTERNAL_STORAGE 权限。

如果您的应用以 Android 13 为目标平台,并且在后台运行时需要访问身体传感器信息,那么除了现有的 BODY_SENSORS 权限外,您还必须声明新的 BODY_SENSORS_BACKGROUND 权限。

当您的应用向以 Android 13 或更高版本为目标平台的其他应用的导出组件发送 intent 时,仅当该 intent 与接收应用中的 <intent-filter >元素匹配时,系统才会传送该 intent。不匹配的 intent 会被屏蔽。

为了帮助提高运行时接收器的安全性,Android 13 允许您指定您应用中的特定广播接收器是否应被导出以及是否对设备上的其他应用可见。如果导出广播接收器,其他应用将可以向您的应用发送不受保护的广播。此导出配置在以 Android 13 或更高版本为目标平台的应用中可用,有助于防止一个主要的应用漏洞来源。

在以前的 Android 版本中,设备上的任何应用都可以向动态注册的接收器发送不受保护的广播,除非该接收器受签名权限的保护。

Android 13(API 级别 33)提供了全新的照片选择器体验。应用启动照片选择器时,用户可选择与应用分享特定图片和视频(如个人资料照片),而不是授予应用查看整个媒体库的权限。

照片选择器可为用户提供更好的隐私保护,因为您的应用无需声明任何运行时权限。此外,照片选择器还为应用提供内置标准化界面,从而打造更一致的用户体验。

注意:现在,我们推荐使用照片选择器来访问用户的照片和视频。

Android 13(API 级别 33)在 NEARBY_DEVICES 权限组中引入了一项新的运行时权限,它适用于会管理设备与附近 Wi-Fi 接入点连接情况的应用。这些应用在调用多个不同的 Wi-Fi API 时必须声明新的权限 NEARBY_WIFI_DEVICES。此外,只要应用不会通过 Wi-Fi API 推导物理位置,那么在以 Android 13 或更高版本为目标平台时,就无需声明 ACCESS_FINE_LOCATION 权限。

如果您的应用以 Android 13 为目标平台,您可以使用自动授予应用的 USE_EXACT_ALARM 权限。不过,您的应用若要使用此权限,必须至少满足以下条件之一:

如果您的应用设置了精确闹钟,但不符合前面列表中显示的任一情况,请改为继续声明 SCHEDULE_EXACT_ALARM 权限,并为用户拒绝授予您应用相应访问权限的情况做好准备。

从 Android 13 开始,应用可以撤消先前由系统或用户授予的运行时权限。此 API 可让您的应用执行增强隐私权的任务,如下所示:

如需撤消特定运行时权限,请将该权限的名称传入 revokeSelfPermissionOnKill()。如需同时撤消一组运行时权限,请将这组权限的名称传入 revokeSelfPermissionsOnKill()。撤消是异步发生的,会终止与您应用的 UID 相关联的所有进程。

Android 13 可支持 APK 签名方案 v3.1,此方案在现有的 APK 签名方案 v3 的基础上进行了改进,解决了 APK 签名方案 v3 的一些已知问题。具体而言,v3.1 签名方案允许应用在单个 APK 中同时支持原始签名者和轮替签名者。此外,该方案还支持 SDK 版本定位功能,这会允许轮替定位到更高版本的平台。

v3.1 签名方案使用在 12L 或更低版本中无法识别的新分块 ID。因此,平台会应用以下签名者行为:

尚未轮替其签名密钥的应用无需执行任何其他 *** 作。每当这些应用选择轮替时,系统都会默认应用新的 v3.1 签名方案。

方法一:在布局文件的TextView控件属性中增加一句:android:textIsSelectable="true"

方法二:直接上代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center" >

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center" >

<TextView

android:id="@+id/tv"

android:layout_width="wrap_content"

android:layout_height="60dp"

android:background="#80FF00"

android:gravity="center"

android:text="长按此处跳出复制选框"

android:textColor="#000000" />

</LinearLayout>

</LinearLayout>

package com.example.copytest

import android.os.Bundle

import android.app.Activity

import android.app.AlertDialog

import android.app.Dialog

import android.content.Context

import android.content.DialogInterface

import android.content.DialogInterface.OnClickListener

import android.text.ClipboardManager

import android.view.View

import android.view.View.OnLongClickListener

import android.widget.TextView

import android.widget.Toast

public class MainActivity extends Activity {

private TextView tv

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

tv = (TextView) findViewById(R.id.tv)

tv.setOnLongClickListener(new OnLongClickListener() {

@Override

public boolean onLongClick(View arg0) {

test()

return false

}

})

}

public Dialog test() {

Dialog dialog = new AlertDialog.Builder(this).setTitle("提示")

.setNegativeButton("取消", null)

.setItems(new String[] { "复制" }, new OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

String string = tv.getText().toString()

copy(string, getBaseContext())

Toast.makeText(getBaseContext(), "文本已复制到粘贴板", 2000)

.show()

}

}).create()

dialog.setCanceledOnTouchOutside(false)

dialog.show()

return dialog

}

public static void copy(String content, Context context) {

// 得到剪贴板管理器

ClipboardManager cmb = (ClipboardManager) context

.getSystemService(Context.CLIPBOARD_SERVICE)

cmb.setText(content.trim())

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11448442.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存