pub struct Activity { /* private fields */ }
Expand description
活动是用户可以执行的单一、集中的操作。几乎所有活动都会与用户交互,因此 Activity 类会负责为您创建一个窗口,您可以使用 setContentView 将 UI 放置在该窗口中。 虽然活动通常以全屏窗口的形式呈现给用户,但它们也可以以其他方式使用:浮动窗口(通过设置了 android.R.attr.windowIsFloating 的主题)、多窗口模式或嵌入到其他窗口中。几乎所有 Activity 子类都会实现两种方法: onCreate 是您初始化活动的地方。 最重要的是,在这里您通常会使用定义 UI 的布局资源调用 setContentView(int),并使用 findViewById 检索该 UI 中您需要以编程方式与之交互的小部件。 onPause 是您处理用户暂停与活动进行活动交互的地方。此时应提交用户所做的任何更改(通常提交给保存数据的 android.content.ContentProvider)。在此状态下,活动在屏幕上仍然可见。与 Context 一起使用。startActivity(),所有活动类都必须在其包的 AndroidManifest.xml 中具有相应的 声明。 此处涵盖的主题:片段、活动生命周期、配置更改、启动活动和获取结果、保存持久状态、权限、流程生命周期
开发者指南 Activity 类是应用程序整个生命周期的重要组成部分,而活动的启动和组合方式是平台应用程序模型的基本组成部分。如需详细了解 Android 应用程序的结构以及活动的行为方式,请阅读应用程序基础知识和任务和返回堆栈开发者指南。您还可以在活动开发者指南中找到有关如何创建活动的详细讨论。
Fragments androidx.fragment.app.FragmentActivity 子类可以利用 androidx.fragment.app.Fragment 类来更好地模块化其代码,为更大的屏幕构建更复杂的用户界面,并帮助在小屏幕和大屏幕之间扩展其应用程序。有关使用 fragments 的更多信息,请阅读 Fragments 开发者指南。
活动生命周期 系统中的活动作为活动堆栈进行管理。当启动新的活动时,通常将其放置在当前堆栈的顶部,并成为运行活动 - 先前的活动始终保持在堆栈中的下方,并且直到新活动退出之前,它不会再次进入前景。屏幕上可以看到一个或多个活动堆栈。 一项活动本质上有四个状态:如果活动在屏幕的前景(最高堆栈的最高位置),则它是活动的或运行的。这通常是用户当前与之交互的活动。如果一项活动失去了焦点,但仍会显示给用户,则可以看到。如果新的非填充大小或透明活动集中在您的活动之上,则可能在多窗口模式下具有较高的位置,或者活动本身在当前窗口模式下不可集中。此类活动完全活着(它维护所有州和会员信息,并且仍然附加到窗口管理器上)。 如果一个活动完全被另一个活动掩盖,则将其停止或隐藏。它仍然保留所有状态和成员信息,但是,用户不再可见,因此其窗口被隐藏了,当其他地方需要内存时,它通常会被系统杀死。该系统可以通过要求完成或简单地杀死其过程,从而使其从内存中删除活动,从而摧毁其过程。当它再次显示给用户时,必须将其完全重新启动并恢复为先前的状态。 下图显示了活动的重要状态路径。正方形矩形表示您可以实现的回调方法,以执行活动在状态之间移动时执行操作。彩色椭圆形是活动中的主要状态。 您可能有兴趣在 Activity 中监控三个关键循环: Activity 的整个生命周期发生在第一次调用 onCreate 到最后一次调用 onDestroy 之间。Activity 将在 onCreate() 中设置“全局”状态,并在 onDestroy() 中释放所有剩余资源。 例如,如果它有一个线程在后台运行以从网络下载数据,它可能会在 onCreate() 中创建该线程,然后在 onDestroy() 中停止该线程。 Activity 的可见生命周期发生在调用 onStart 到相应的 onStop 调用之间。在此期间,用户可以在屏幕上看到 Activity,尽管它可能不在前台并与用户交互。在这两种方法之间,您可以维护向用户显示 Activity 所需的资源。例如,您可以在 onStart() 中注册一个 android.content.BroadcastReceiver 来监控影响 UI 的更改,并在用户不再看到您正在显示的内容时在 onStop() 中取消注册它。 onStart() 和 onStop() 方法可以多次调用,因为活动对用户可见或隐藏。活动的前台生命周期发生在对 onResume 的调用和对 onPause 的相应调用之间。在此期间,活动可见、处于活动状态并与用户交互。活动可以频繁地在恢复和暂停状态之间切换 - 例如当设备进入睡眠状态时、当活动结果传递时、当新意图传递时 - 因此这些方法中的代码应该相当轻量。活动的整个生命周期由以下活动方法定义。所有这些都是钩子,您可以覆盖它们以在活动更改状态时执行适当的工作。 所有活动都将实现 onCreate 以进行初始设置;许多活动还将实现 onPause 以提交数据更改并准备暂停与用户的交互,以及 onStop 以处理不再显示在屏幕上的情况。在实现这些方法时,您应该始终调用您的超类。 public class Activity extends ApplicationContext { protected void onCreate(Bundle savedInstanceState);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
} 一般来说,活动生命周期的流程如下: 方法 | 描述 | 可终止?| 下一步 onCreate() | 首次创建活动时调用。您应该在此处进行所有常规静态设置:创建视图、将数据绑定到列表等。此方法还为您提供了一个包含活动先前冻结状态的 Bundle(如果有)。始终紧随 onStart()。 | 否 | onStart() onRestart() | 在您的活动停止后、再次启动之前调用。始终紧随 onStart() | 否 | onStart() onStart() | 当活动对用户可见时调用。如果活动进入前台,则紧随 onResume(),如果活动隐藏,则紧随 onStop()。 | 否 | onResume() 或 onStop() onResume() | 当活动开始与用户交互时调用。此时您的活动位于其活动堆栈的顶部,用户输入将发送到它。始终紧随 onPause()。| 否 | onPause() onPause() |当 Activity 失去前台状态、不再可聚焦或在转换为停止/隐藏或销毁状态之前调用。Activity 对用户仍然可见,因此建议保持其可见活动并继续更新 UI。此方法的实现必须非常快,因为下一个 Activity 将不会恢复,直到此方法返回。如果 Activity 返回到前台,则后面跟着 onResume(),如果它对用户不可见,则后面跟着 onStop()。 | Pre-Build.VERSION_CODES.HONEYCOMB | onResume() 或 onStop() onStop() | 当 Activity 对用户不再可见时调用。这可能是因为在顶部启动了新 Activity、将现有 Activity 置于此 Activity 前面或此 Activity 被销毁。这通常用于停止动画和刷新 UI 等。如果此 Activity 要回来与用户交互,则后面跟着 onRestart(),如果此 Activity 要消失,则后面跟着 onDestroy()。 | 是 | onRestart() 或 onDestroy() onDestroy() | 您的活动被销毁之前收到的最后一个调用。发生这种情况的原因可能是活动正在结束(有人在其上调用了 finish),也可能是因为系统暂时销毁了此活动实例以节省空间。您可以使用 isFinishing 方法区分这两种情况。 | 是 | 无 请注意上表中的“可杀死”列 - 对于标记为可杀死的方法,在该方法返回后,系统可能会随时杀死承载活动的进程,而无需执行其另一行代码。因此,您应该使用 onPause 方法将任何持久数据(例如用户编辑)写入存储。此外,在将活动置于此类后台状态之前会调用方法 onSaveInstanceState(Bundle),允许您将活动中的任何动态实例状态保存到给定的 Bundle 中,如果需要重新创建活动,则稍后在 onCreate 中接收。有关进程生命周期如何与其托管的活动相关联的更多信息,请参阅进程生命周期部分。 请注意,在 onPause 而不是 onSaveInstanceState 中保存持久数据非常重要,因为后者不是生命周期回调的一部分,因此不会在其文档中描述的每种情况下都调用它。 请注意,这些语义在针对 Build.VERSION_CODES.HONEYCOMB 开头的平台的应用程序与针对先前平台的应用程序之间会略有不同。从 Honeycomb 开始,应用程序在其 onStop 返回之前不处于可终止状态。这会影响何时调用 onSaveInstanceState(Bundle)(可以在 onPause() 之后安全地调用它),并允许应用程序安全地等到 onStop() 保存持久状态。对于针对 Build.VERSION_CODES.P 开头的平台的应用程序,onSaveInstanceState(Bundle) 将始终在 onStop 之后调用,因此应用程序可以在 onStop 中安全地执行片段事务,并能够在以后保存持久状态。对于那些未标记为可终止的方法,从调用该方法开始并在该方法返回后继续,系统将不会终止活动的进程。因此,活动处于可终止状态,例如,在 onStop() 之后到 onResume() 开始之间。请记住,在极端内存压力下,系统可以随时终止应用程序进程。
配置更改 如果设备的配置(由 Resources.Configuration 类定义)发生变化,则显示用户界面的任何内容都需要更新以匹配该配置。由于 Activity 是与用户交互的主要机制,因此它包含处理配置更改的特殊支持。除非您另行指定,否则配置更改(例如屏幕方向、语言、输入设备等的更改)将导致当前活动被销毁,并根据需要经历正常的活动生命周期过程 onPause、onStop 和 onDestroy。 如果活动处于前台或对用户可见,则在该实例中调用 onDestroy 后,将创建该活动的新实例,并使用上一个实例从 onSaveInstanceState 生成的任何 savedInstanceState。这样做是因为任何应用程序资源(包括布局文件)都可以根据任何配置值进行更改。因此,处理配置更改的唯一安全方法是重新检索所有资源,包括布局、可绘制对象和字符串。因为活动必须已经知道如何保存其状态并从该状态重新创建自身,所以这是一种让活动使用新配置重新启动的便捷方法。在某些特殊情况下,您可能希望根据一种或多种类型的配置更改绕过活动重新启动。这可以通过其清单中的 android:configChanges 属性完成。对于您在此处声明处理的任何类型的配置更改,您将收到对当前活动的 onConfigurationChanged 方法的调用,而不是重新启动。但是,如果配置更改涉及您未处理的任何内容,则活动仍将重新启动,并且不会调用 onConfigurationChanged。 启动活动并获取结果 startActivity 方法用于启动新活动,新活动将放置在活动堆栈的顶部。它需要一个参数,即 Intent,用于描述要执行的活动。有时,您希望在活动结束时从活动中获取结果。例如,您可以启动一个活动,让用户在联系人列表中选择一个人;当活动结束时,它会返回所选的人。为此,您可以调用 startActivityForResult(Intent, int) 版本,并使用第二个整数参数标识调用。结果将通过您的 onActivityResult 方法返回。当活动退出时,它可以调用 setResult(int) 将数据返回给其父级。它必须始终提供结果代码,可以是标准结果 RESULT_CANCELED、RESULT_OK 或从 RESULT_FIRST_USER 开始的任何自定义值。此外,它可以选择返回包含其想要的任何其他数据的 Intent。所有这些信息都会出现在父级的活动中。 onActivityResult(),以及它最初提供的整数标识符。如果子活动因任何原因(例如崩溃)失败,则父活动将收到带有代码 RESULT_CANCELED 的结果。 public class MyActivity extends Activity { …
static final int PICK_CONTACT_REQUEST = 0;
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent. KEYCODE_DPAD_CENTER) {
// When the user center presses, let them pick a contact.
startActivityForResult(
new Intent(Intent. ACTION_PICK,
new Uri("content:// contacts")),
PICK_CONTACT_REQUEST);
return true;
}
return false;
}
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == PICK_CONTACT_REQUEST) {
if (resultCode == RESULT_OK) {
// A contact was picked. Here we will just display it
// to the user.
startActivity(new Intent(Intent. ACTION_VIEW, data));
}
}
}
}
保存持久状态 活动通常要处理两种持久状态:共享文档类数据(通常使用内容提供程序存储在 SQLite 数据库中)和内部状态(例如用户偏好)。对于内容提供程序数据,我们建议活动使用“就地编辑”用户模型。也就是说,用户所做的任何编辑都会立即生效,无需额外的确认步骤。支持此模型通常只需遵循两个规则即可:创建新文档时,会立即为其创建后备数据库条目或文件。例如,如果用户选择编写新电子邮件,则在他们开始输入数据时会立即为该电子邮件创建一个新条目,这样,如果他们在此之后转到任何其他活动,此电子邮件现在将出现在草稿列表中。当调用活动的 onPause() 方法时,它应该将用户所做的任何更改提交给后备内容提供程序或文件。这可确保即将运行的任何其他活动都可以看到这些更改。 您可能希望在活动生命周期的关键时刻更积极地提交数据:例如,在开始新活动之前、在完成您自己的活动之前、用户在输入字段之间切换时等。此模型旨在防止用户在活动之间导航时丢失数据,并允许系统在活动停止后(或在 Build.VERSION_CODES.HONEYCOMB 之前的平台版本上暂停)随时安全地终止活动(因为其他地方需要系统资源)。请注意,这意味着用户按下活动中的 BACK 并不意味着“取消”——它意味着离开活动并保存其当前内容。取消活动中的编辑必须通过其他机制提供,例如明确的“恢复”或“撤消”选项。有关内容提供者的更多信息,请参阅内容包。这些是不同活动如何在它们之间调用和传播数据的关键方面。 Activity 类还提供了用于管理与活动相关的内部持久状态的 API。例如,这可用于记住用户在日历中首选的初始显示(日视图或周视图)或用户在 Web 浏览器中的默认主页。活动持久状态通过方法 getPreferences 进行管理,允许您检索和修改与活动相关的一组名称/值对。要使用在多个应用程序组件(活动、接收器、服务、提供程序)之间共享的首选项,您可以使用底层 Context.getSharedPreferences() 方法来检索存储在特定名称下的首选项对象。 (请注意,无法在应用程序包之间共享设置数据 - 为此,您需要一个内容提供程序。)以下是日历活动的摘录,该活动在其持久设置中存储了用户的首选视图模式: public class CalendarActivity extends Activity { …
static final int DAY_VIEW_MODE = 0;
static final int WEEK_VIEW_MODE = 1;
private SharedPreferences mPrefs;
private int mCurViewMode;
protected void onCreate(Bundle savedInstanceState) {
super. onCreate(savedInstanceState);
mPrefs = getSharedPreferences(getLocalClassName(), MODE_PRIVATE);
mCurViewMode = mPrefs. getInt("view_mode", DAY_VIEW_MODE);
}
protected void onPause() {
super. onPause();
SharedPreferences. Editor ed = mPrefs. edit();
ed. putInt("view_mode", mCurViewMode);
ed. commit();
}
}
权限 当在清单的 标记中声明某个 Activity 时,可以强制执行启动该 Activity 的能力。这样,其他应用程序将需要在自己的清单中声明相应的 元素,才能启动该 Activity。启动 Activity 时,您可以在 Intent 上设置 Intent.FLAG_GRANT_READ_URI_PERMISSION 和/或 Intent.FLAG_GRANT_WRITE_URI_PERMISSION。这将授予 Activity 访问 Intent 中特定 URI 的权限。 访问权限将一直保留,直到 Activity 完成(它将在托管进程被终止和其他临时销毁期间保留)。从 Build.VERSION_CODES.GINGERBREAD 开始,如果 Activity 已创建并且正在向 onNewIntent(Intent) 传递新的 Intent,则任何新授予的 URI 权限都将添加到其拥有的现有权限中。有关权限和安全性的更多信息,请参阅“安全和权限”文档。
进程生命周期 Android 系统会尝试尽可能长时间地保留应用程序进程,但最终当内存不足时,将需要删除旧进程。如活动生命周期中所述,删除哪个进程的决定与用户与其交互的状态密切相关。一般而言,根据进程中运行的活动,进程可以处于四种状态,此处按重要性顺序列出。系统将先杀死不太重要的进程(最后一个),然后再杀死更重要的进程(第一个)。前台活动(用户当前正在与之交互的屏幕顶部的活动)被认为是最重要的。只有在其使用的内存超过设备可用内存时,才会将其进程作为最后的手段被杀死。通常此时设备已达到内存分页状态,因此这是保持用户界面响应所必需的。 可见活动(用户可见但不在前台的活动,例如位于前台对话框后面的活动或多窗口模式下其他活动旁边的活动)被认为极其重要,除非需要保持前台活动运行,否则不会将其终止。后台活动(用户不可见且已停止的活动)不再重要,因此系统可以安全地终止其进程以回收内存用于其他前台或可见进程。如果需要终止其进程,当用户导航回活动时(使其再次在屏幕上可见),将使用其先前在 onSaveInstanceState 中提供的 savedInstanceState 调用其 onCreate 方法,以便它可以在与用户上次离开时相同的状态下重新启动。空进程是指不承载任何活动或其他应用程序组件(例如 Service 或 android.content.BroadcastReceiver 类)的进程。当内存不足时,系统会很快终止这些进程。因此,您在 Activity 之外执行的任何后台操作都必须在 Activity BroadcastReceiver 或 Service 的上下文中执行,以确保系统知道它需要保留您的进程。有时,Activity 可能需要执行独立于 Activity 生命周期本身的长期运行操作。例如,相机应用程序允许您将图片上传到网站。上传可能需要很长时间,应用程序应允许用户在执行时离开应用程序。为此,您的 Activity 应启动一个用于上传的服务。这样,系统就可以在上传期间正确确定您的进程的优先级(认为它比其他不可见的应用程序更重要),而不管原始 Activity 是暂停、停止还是完成。
Implementations§
Source§impl Activity
impl Activity
Sourcepub fn is_finishing(&self) -> bool
pub fn is_finishing(&self) -> bool
检查此活动是否正在完成,可能是因为您调用了 finish 或其他人请求它完成。这通常在 onPause 中用于确定活动是暂停还是完全完成。 返回:如果活动正在完成,则返回 true;否则返回 false。
Sourcepub fn set_title<CS: CharSequence>(&self, title: &CS)
pub fn set_title<CS: CharSequence>(&self, title: &CS)
更改与此活动关联的标题。如果这是顶级活动,其窗口的标题将会更改。如果这是嵌入活动,则父级可以对其执行任何操作。
title
标题。
Sourcepub fn get_title<CS: CharSequence>(&self) -> CS
pub fn get_title<CS: CharSequence>(&self) -> CS
获取与此活动关联的标题。
Sourcepub fn set_content_view(&self, view: &View)
pub fn set_content_view(&self, view: &View)
将活动内容设置为显式视图。此视图直接放入活动的视图层次结构中。它本身可以是一个复杂的视图层次结构。调用此方法时,将忽略指定视图的布局参数。视图的宽度和高度默认设置为 ViewGroup.LayoutParams.MATCH_PARENT。要使用您自己的布局参数,请改为调用 setContentView(View, ViewGroup.LayoutParams)。
view
要显示的所需内容。
Sourcepub fn run_on_ui_thread<R: Runnable>(&self, action: &R)
pub fn run_on_ui_thread<R: Runnable>(&self, action: &R)
在 UI 线程上运行指定的操作。如果当前线程是 UI 线程,则立即执行该操作。如果当前线程不是 UI 线程,则将操作发布到 UI 线程的事件队列。
action
在 UI 线程上运行的操作
Sourcepub fn get_window_manager<WM: WindowManager>(&self) -> WM
pub fn get_window_manager<WM: WindowManager>(&self) -> WM
查询用于显示自定义窗口的窗口管理器。
Sourcepub fn get_window(&self) -> Option<Window>
pub fn get_window(&self) -> Option<Window>
查询活动的当前窗口。这可用于直接访问无法通过 Activity/Screen 获得的窗口 API 部分。 返回:Window 当前窗口,如果活动不可见,则返回 null。
Sourcepub fn get_current_focus(&self) -> Option<View>
pub fn get_current_focus(&self) -> Option<View>
调用此 Activity 的 Window 上的 Window.getCurrentFocus 来返回当前聚焦的视图。 返回:View 当前具有焦点的视图或 null。
Sourcepub fn has_window_focus(&self) -> bool
pub fn has_window_focus(&self) -> bool
如果此活动的主窗口当前具有窗口焦点,则返回 true。请注意,这与视图本身具有焦点不同。 返回:如果此活动的主窗口当前具有窗口焦点,则返回 true。
检查自由格式窗口上的标题是否直接显示在内容上。 返回:如果标题显示在内容上,则返回 True;如果将内容向下推,则返回 false。
Sourcepub fn request_permissions(
&self,
permissions: &[String],
request_code: i32,
) -> Result<(), <Self as JType>::Error>
pub fn request_permissions( &self, permissions: &[String], request_code: i32, ) -> Result<(), <Self as JType>::Error>
请求授予此应用的权限。这些权限必须在清单中请求,不应授予您的应用,并且应具有危险保护级别,无论它们是由平台还是第三方应用声明的。
如果在清单中请求,则在安装时授予普通权限 android.content.pm.PermissionInfo.PROTECTION_NORMAL。如果在清单中请求,则在安装时授予签名权限 android.content.pm.PermissionInfo.PROTECTION_SIGNATURE,并且您的应用的签名与声明权限的应用的签名相匹配。
在调用此 API 之前,请调用 shouldShowRequestPermissionRationale(String) 以检查系统是否建议在请求权限之前显示理由 UI。如果您的应用没有请求的权限,则将向用户显示用于接受这些权限的 UI。
在用户接受或拒绝请求的权限后,您将在 onRequestPermissionsResult(int, String[], int[]) 上收到回调,报告是否授予权限。请注意,请求权限并不保证会授予权限,您的应用应该能够在没有此权限的情况下运行。
此方法可能会启动一个活动,允许用户选择授予哪些权限以及拒绝哪些权限。因此,您应该做好准备,您的活动可能会暂停和恢复。此外,授予某些权限可能需要重新启动您的应用程序。
在这种情况下,系统将在将结果传递给 onRequestPermissionsResult(int, String[], int[]) 之前重新创建活动堆栈。检查您是否拥有权限时,您应该使用 checkSelfPermission(String)。
如果您的活动将 noHistory 设置为 true,则您无法请求权限,因为在这种情况下,活动不会收到包括 onRequestPermissionsResult(int, String[], int[]) 在内的结果回调。 RuntimePermissions 示例应用演示了如何使用此方法在运行时请求权限。
抛出:IllegalArgumentException – 如果 requestCode 为负数。
permissions
请求的权限。必须为非null且不为空。
request_code
应用程序特定的请求代码,用于与报告给 onRequestPermissionsResult(int, String[], int[]) 的结果相匹配。应大于等于 0。
Sourcepub fn should_show_request_permission_rationale(
&self,
permission: String,
) -> bool
pub fn should_show_request_permission_rationale( &self, permission: String, ) -> bool
获取在请求权限之前是否应显示带有理由的 UI。
返回:是否应显示权限理由 UI。
permission
您的应用想要请求的权限。
Methods from Deref<Target = ContextWrapper>§
Sourcepub fn get_class_loader(&self) -> ClassLoader
pub fn get_class_loader(&self) -> ClassLoader
返回可用于查询此包中的类的类加载器。
Sourcepub fn send_broadcast(&self, intent: &Intent)
pub fn send_broadcast(&self, intent: &Intent)
将给定的意图广播给所有感兴趣的 BroadcastReceiver。此调用是异步的;它会立即返回,您将在接收器运行时继续执行。接收器不会传播任何结果,接收器也无法中止广播。如果您想允许接收器传播结果或中止广播,则必须使用 sendOrderedBroadcast(Intent, String) 发送有序广播。有关 Intent 广播的更多信息,请参阅 BroadcastReceiver。
intent
要广播的 Intent;与此 Intent 匹配的所有接收器都将收到广播。
Methods from Deref<Target = Context>§
pub const MODE_PRIVATE: i32 = 0i32
pub const MODE_WORLD_READABLE: i32 = 1i32
pub const MODE_WORLD_WRITEABLE: i32 = 2i32
pub const MODE_APPEND: i32 = 32_768i32
pub const MODE_MULTI_PROCESS: i32 = 4i32
pub const MODE_ENABLE_WRITE_AHEAD_LOGGING: i32 = 8i32
pub const MODE_NO_LOCALIZED_COLLATORS: i32 = 16i32
pub const POWER_SERVICE: &'static str = "power"
pub const POWER_STATS_SERVICE: &'static str = "powerstats"
pub const RECOVERY_SERVICE: &'static str = "recovery"
pub const SYSTEM_UPDATE_SERVICE: &'static str = "system_update"
pub const WINDOW_SERVICE: &'static str = "window"
pub const LAYOUT_INFLATER_SERVICE: &'static str = "layout_inflater"
pub const ACCOUNT_SERVICE: &'static str = "account"
pub const ACTIVITY_SERVICE: &'static str = "activity"
pub const ACTIVITY_TASK_SERVICE: &'static str = "activity_task"
pub const URI_GRANTS_SERVICE: &'static str = "uri_grants"
pub const ALARM_SERVICE: &'static str = "alarm"
pub const NOTIFICATION_SERVICE: &'static str = "notification"
pub const ACCESSIBILITY_SERVICE: &'static str = "accessibility"
pub const CAPTIONING_SERVICE: &'static str = "captioning"
pub const KEYGUARD_SERVICE: &'static str = "keyguard"
pub const LOCATION_SERVICE: &'static str = "location"
pub const COUNTRY_DETECTOR: &'static str = "country_detector"
pub const SEARCH_SERVICE: &'static str = "search"
pub const SENSOR_SERVICE: &'static str = "sensor"
pub const SENSOR_PRIVACY_SERVICE: &'static str = "sensor_privacy"
pub const STORAGE_SERVICE: &'static str = "storage"
pub const STORAGE_STATS_SERVICE: &'static str = "storagestats"
pub const WALLPAPER_SERVICE: &'static str = "wallpaper"
pub const VIBRATOR_MANAGER_SERVICE: &'static str = "vibrator_manager"
pub const VIBRATOR_SERVICE: &'static str = "vibrator"
pub const STATUS_BAR_SERVICE: &'static str = "statusbar"
pub const CONNECTIVITY_SERVICE: &'static str = "connectivity"
pub const PAC_PROXY_SERVICE: &'static str = "pac_proxy"
pub const VCN_MANAGEMENT_SERVICE: &'static str = "vcn_management"
pub const NETD_SERVICE: &'static str = "netd"
pub const NETWORK_STACK_SERVICE: &'static str = "network_stack"
pub const TETHERING_SERVICE: &'static str = "tethering"
pub const IPSEC_SERVICE: &'static str = "ipsec"
pub const VPN_MANAGEMENT_SERVICE: &'static str = "vpn_management"
pub const CONNECTIVITY_DIAGNOSTICS_SERVICE: &'static str = "connectivity_diagnostics"
pub const TEST_NETWORK_SERVICE: &'static str = "test_network"
pub const UPDATE_LOCK_SERVICE: &'static str = "updatelock"
pub const NETWORKMANAGEMENT_SERVICE: &'static str = "network_management"
pub const SLICE_SERVICE: &'static str = "slice"
pub const NETWORK_STATS_SERVICE: &'static str = "netstats"
pub const WIFI_SERVICE: &'static str = "wifi"
pub const WIFI_NL80211_SERVICE: &'static str = "wifinl80211"
pub const WIFI_P2P_SERVICE: &'static str = "wifip2p"
pub const WIFI_AWARE_SERVICE: &'static str = "wifiaware"
pub const WIFI_SCANNING_SERVICE: &'static str = "wifiscanner"
pub const WIFI_RTT_SERVICE: &'static str = "rttmanager"
pub const WIFI_RTT_RANGING_SERVICE: &'static str = "wifirtt"
pub const LOWPAN_SERVICE: &'static str = "lowpan"
pub const ETHERNET_SERVICE: &'static str = "ethernet"
pub const NSD_SERVICE: &'static str = "servicediscovery"
pub const AUDIO_SERVICE: &'static str = "audio"
pub const AUDIO_DEVICE_VOLUME_SERVICE: &'static str = "audio_device_volume"
pub const MEDIA_TRANSCODING_SERVICE: &'static str = "media_transcoding"
pub const AUTH_SERVICE: &'static str = "auth"
pub const FINGERPRINT_SERVICE: &'static str = "fingerprint"
pub const FACE_SERVICE: &'static str = "face"
pub const IRIS_SERVICE: &'static str = "iris"
pub const BIOMETRIC_SERVICE: &'static str = "biometric"
pub const MEDIA_COMMUNICATION_SERVICE: &'static str = "media_communication"
pub const MEDIA_ROUTER_SERVICE: &'static str = "media_router"
pub const MEDIA_SESSION_SERVICE: &'static str = "media_session"
pub const TELEPHONY_SERVICE: &'static str = "phone"
pub const TELEPHONY_SUBSCRIPTION_SERVICE: &'static str = "telephony_subscription_service"
pub const TELECOM_SERVICE: &'static str = "telecom"
pub const CARRIER_CONFIG_SERVICE: &'static str = "carrier_config"
pub const EUICC_SERVICE: &'static str = "euicc"
pub const EUICC_CARD_SERVICE: &'static str = "euicc_card"
pub const MMS_SERVICE: &'static str = "mms"
pub const CLIPBOARD_SERVICE: &'static str = "clipboard"
pub const TEXT_CLASSIFICATION_SERVICE: &'static str = "textclassification"
pub const SELECTION_TOOLBAR_SERVICE: &'static str = "selection_toolbar"
pub const FONT_SERVICE: &'static str = "font"
pub const ATTENTION_SERVICE: &'static str = "attention"
pub const ROTATION_RESOLVER_SERVICE: &'static str = "resolver"
pub const INPUT_METHOD_SERVICE: &'static str = "input_method"
pub const TEXT_SERVICES_MANAGER_SERVICE: &'static str = "textservices"
pub const APPWIDGET_SERVICE: &'static str = "appwidget"
pub const VOICE_INTERACTION_MANAGER_SERVICE: &'static str = "voiceinteraction"
pub const AUTOFILL_MANAGER_SERVICE: &'static str = "autofill"
pub const TEXT_TO_SPEECH_MANAGER_SERVICE: &'static str = "texttospeech"
pub const CONTENT_CAPTURE_MANAGER_SERVICE: &'static str = "content_capture"
pub const TRANSLATION_MANAGER_SERVICE: &'static str = "translation"
pub const UI_TRANSLATION_SERVICE: &'static str = "ui_translation"
pub const CONTENT_SUGGESTIONS_SERVICE: &'static str = "content_suggestions"
pub const APP_PREDICTION_SERVICE: &'static str = "app_prediction"
pub const SEARCH_UI_SERVICE: &'static str = "search_ui"
pub const SMARTSPACE_SERVICE: &'static str = "smartspace"
pub const CLOUDSEARCH_SERVICE: &'static str = "cloudsearch"
pub const SOUND_TRIGGER_SERVICE: &'static str = "soundtrigger"
pub const SOUND_TRIGGER_MIDDLEWARE_SERVICE: &'static str = "soundtrigger_middleware"
pub const WALLPAPER_EFFECTS_GENERATION_SERVICE: &'static str = "wallpaper_effects_generation"
pub const MUSIC_RECOGNITION_SERVICE: &'static str = "music_recognition"
pub const PERMISSION_SERVICE: &'static str = "permission"
pub const LEGACY_PERMISSION_SERVICE: &'static str = "legacy_permission"
pub const PERMISSION_CONTROLLER_SERVICE: &'static str = "permission_controller"
pub const PERMISSION_CHECKER_SERVICE: &'static str = "permission_checker"
pub const PERMISSION_ENFORCER_SERVICE: &'static str = "permission_enforcer"
pub const APP_HIBERNATION_SERVICE: &'static str = "app_hibernation"
pub const BACKUP_SERVICE: &'static str = "backup"
pub const ROLLBACK_SERVICE: &'static str = "rollback"
pub const REBOOT_READINESS_SERVICE: &'static str = "reboot_readiness"
pub const DROPBOX_SERVICE: &'static str = "dropbox"
pub const BACKGROUND_INSTALL_CONTROL_SERVICE: &'static str = "background_install_control"
pub const BINARY_TRANSPARENCY_SERVICE: &'static str = "transparency"
pub const DEVICE_IDLE_CONTROLLER: &'static str = "deviceidle"
pub const POWER_WHITELIST_MANAGER: &'static str = "power_whitelist"
pub const POWER_EXEMPTION_SERVICE: &'static str = "power_exemption"
pub const DEVICE_POLICY_SERVICE: &'static str = "device_policy"
pub const UI_MODE_SERVICE: &'static str = "uimode"
pub const DOWNLOAD_SERVICE: &'static str = "download"
pub const BATTERY_SERVICE: &'static str = "batterymanager"
pub const NFC_SERVICE: &'static str = "nfc"
pub const BLUETOOTH_SERVICE: &'static str = "bluetooth"
pub const SIP_SERVICE: &'static str = "sip"
pub const USB_SERVICE: &'static str = "usb"
pub const ADB_SERVICE: &'static str = "adb"
pub const SERIAL_SERVICE: &'static str = "serial"
pub const HDMI_CONTROL_SERVICE: &'static str = "hdmi_control"
pub const INPUT_SERVICE: &'static str = "input"
pub const DISPLAY_SERVICE: &'static str = "display"
pub const COLOR_DISPLAY_SERVICE: &'static str = "color_display"
pub const USER_SERVICE: &'static str = "user"
pub const LAUNCHER_APPS_SERVICE: &'static str = "launcherapps"
pub const RESTRICTIONS_SERVICE: &'static str = "restrictions"
pub const APP_OPS_SERVICE: &'static str = "appops"
pub const ROLE_SERVICE: &'static str = "role"
pub const CAMERA_SERVICE: &'static str = "camera"
pub const PRINT_SERVICE: &'static str = "print"
pub const COMPANION_DEVICE_SERVICE: &'static str = "companiondevice"
pub const VIRTUAL_DEVICE_SERVICE: &'static str = "virtualdevice"
pub const CONSUMER_IR_SERVICE: &'static str = "consumer_ir"
pub const TRUST_SERVICE: &'static str = "trust"
pub const TV_INTERACTIVE_APP_SERVICE: &'static str = "tv_interactive_app"
pub const TV_INPUT_SERVICE: &'static str = "tv_input"
pub const TV_TUNER_RESOURCE_MGR_SERVICE: &'static str = "tv_tuner_resource_mgr"
pub const NETWORK_SCORE_SERVICE: &'static str = "network_score"
pub const USAGE_STATS_SERVICE: &'static str = "usagestats"
pub const JOB_SCHEDULER_SERVICE: &'static str = "jobscheduler"
pub const RESOURCE_ECONOMY_SERVICE: &'static str = "tare"
pub const PERSISTENT_DATA_BLOCK_SERVICE: &'static str = "persistent_data_block"
pub const OEM_LOCK_SERVICE: &'static str = "oem_lock"
pub const MEDIA_PROJECTION_SERVICE: &'static str = "media_projection"
pub const MIDI_SERVICE: &'static str = "midi"
pub const RADIO_SERVICE: &'static str = "broadcastradio"
pub const HARDWARE_PROPERTIES_SERVICE: &'static str = "hardware_properties"
pub const THERMAL_SERVICE: &'static str = "thermalservice"
pub const PERFORMANCE_HINT_SERVICE: &'static str = "performance_hint"
pub const SHORTCUT_SERVICE: &'static str = "shortcut"
pub const CONTEXTHUB_SERVICE: &'static str = "contexthub"
pub const SYSTEM_HEALTH_SERVICE: &'static str = "systemhealth"
pub const GATEKEEPER_SERVICE: &'static str = "android.service.gatekeeper.IGateKeeperService"
pub const DEVICE_IDENTIFIERS_SERVICE: &'static str = "device_identifiers"
pub const INCIDENT_SERVICE: &'static str = "incident"
pub const INCIDENT_COMPANION_SERVICE: &'static str = "incidentcompanion"
pub const STATS_MANAGER_SERVICE: &'static str = "statsmanager"
pub const STATS_COMPANION_SERVICE: &'static str = "statscompanion"
pub const STATS_BOOTSTRAP_ATOM_SERVICE: &'static str = "statsbootstrap"
pub const STATS_MANAGER: &'static str = "stats"
pub const PLATFORM_COMPAT_SERVICE: &'static str = "platform_compat"
pub const PLATFORM_COMPAT_NATIVE_SERVICE: &'static str = "platform_compat_native"
pub const BUGREPORT_SERVICE: &'static str = "bugreport"
pub const OVERLAY_SERVICE: &'static str = "overlay"
pub const RESOURCES_SERVICE: &'static str = "resources"
pub const IDMAP_SERVICE: &'static str = "idmap"
pub const VR_SERVICE: &'static str = "vrmanager"
pub const CROSS_PROFILE_APPS_SERVICE: &'static str = "crossprofileapps"
pub const SECURE_ELEMENT_SERVICE: &'static str = "secure_element"
pub const TIME_DETECTOR_SERVICE: &'static str = "time_detector"
pub const TIME_ZONE_DETECTOR_SERVICE: &'static str = "time_zone_detector"
pub const TIME_MANAGER_SERVICE: &'static str = "time_manager"
pub const APP_BINDING_SERVICE: &'static str = "app_binding"
pub const TELEPHONY_IMS_SERVICE: &'static str = "telephony_ims"
pub const SYSTEM_CONFIG_SERVICE: &'static str = "system_config"
pub const TELEPHONY_RCS_MESSAGE_SERVICE: &'static str = "ircsmessage"
pub const DYNAMIC_SYSTEM_SERVICE: &'static str = "dynamic_system"
pub const BLOB_STORE_SERVICE: &'static str = "blob_store"
pub const TELEPHONY_REGISTRY_SERVICE: &'static str = "telephony_registry"
pub const BATTERY_STATS_SERVICE: &'static str = "batterystats"
pub const APP_SEARCH_SERVICE: &'static str = "app_search"
pub const APP_INTEGRITY_SERVICE: &'static str = "app_integrity"
pub const DATA_LOADER_MANAGER_SERVICE: &'static str = "dataloader_manager"
pub const INCREMENTAL_SERVICE: &'static str = "incremental"
pub const ATTESTATION_VERIFICATION_SERVICE: &'static str = "attestation_verification"
pub const FILE_INTEGRITY_SERVICE: &'static str = "file_integrity"
pub const REMOTE_PROVISIONING_SERVICE: &'static str = "remote_provisioning"
pub const LIGHTS_SERVICE: &'static str = "lights"
pub const UWB_SERVICE: &'static str = "uwb"
pub const DREAM_SERVICE: &'static str = "dream"
pub const SMS_SERVICE: &'static str = "sms"
pub const PEOPLE_SERVICE: &'static str = "people"
pub const DEVICE_STATE_SERVICE: &'static str = "device_state"
pub const MEDIA_METRICS_SERVICE: &'static str = "media_metrics"
pub const SPEECH_RECOGNITION_SERVICE: &'static str = "speech_recognition"
pub const GAME_SERVICE: &'static str = "game"
pub const DOMAIN_VERIFICATION_SERVICE: &'static str = "domain_verification"
pub const DISPLAY_HASH_SERVICE: &'static str = "display_hash"
pub const LOCALE_SERVICE: &'static str = "locale"
pub const SAFETY_CENTER_SERVICE: &'static str = "safety_center"
pub const NEARBY_SERVICE: &'static str = "nearby"
pub const AMBIENT_CONTEXT_SERVICE: &'static str = "ambient_context"
pub const WEARABLE_SENSING_SERVICE: &'static str = "wearable_sensing"
pub const HEALTHCONNECT_SERVICE: &'static str = "healthconnect"
pub const CREDENTIAL_SERVICE: &'static str = "credential"
pub const DEVICE_LOCK_SERVICE: &'static str = "device_lock"
pub const VIRTUALIZATION_SERVICE: &'static str = "virtualization"
pub const GRAMMATICAL_INFLECTION_SERVICE: &'static str = "grammatical_inflection"
pub const SATELLITE_SERVICE: &'static str = "satellite"
pub const SHARED_CONNECTIVITY_SERVICE: &'static str = "shared_connectivity"
Sourcepub fn get_class_loader(&self) -> ClassLoader
pub fn get_class_loader(&self) -> ClassLoader
返回可用于查询此包中的类的类加载器。
Sourcepub fn send_broadcast(&self, intent: &Intent)
pub fn send_broadcast(&self, intent: &Intent)
将给定的意图广播给所有感兴趣的 BroadcastReceiver。此调用是异步的;它会立即返回,您将在接收器运行时继续执行。接收器不会传播任何结果,接收器也无法中止广播。如果您想允许接收器传播结果或中止广播,则必须使用 sendOrderedBroadcast(Intent, String) 发送有序广播。有关 Intent 广播的更多信息,请参阅 BroadcastReceiver。
intent
要广播的 Intent;与此 Intent 匹配的所有接收器都将收到广播。
Sourcepub fn start_activity(&self, intent: &Intent)
pub fn start_activity(&self, intent: &Intent)
与 startActivity(Intent, Bundle) 相同,但未指定任何选项。
intent
要启动的活动的描述。
抛出:ActivityNotFoundException – `
Sourcepub fn get_package_name(&self) -> String
pub fn get_package_name(&self) -> String
返回此应用程序包的名称。
Sourcepub fn get_base_package_name(&self) -> String
pub fn get_base_package_name(&self) -> String
返回此上下文所派生自的基础上下文的名称。这与 getOpPackageName() 相同,除非系统组件加载到其他应用进程中,在这种情况下 getOpPackageName() 将是该进程中主软件包的名称(以便应用操作 uid 验证可以使用该名称)。
Sourcepub fn get_op_package_name(&self) -> String
pub fn get_op_package_name(&self) -> String
返回应用于此上下文中的 android.app.AppOpsManager 调用的包名称,以便 app ops manager 的 uid 验证可以使用该名称。这通常不适用于第三方应用程序开发人员。
Sourcepub fn get_attribution_tag(&self) -> Option<String>
pub fn get_attribution_tag(&self) -> Option<String>
归因可用于复杂的应用中,以在逻辑上区分应用的各个部分。例如,博客应用可能还内置有即时通讯应用。在这种情况下,每个子功能可以使用两个单独的标签。 返回:此上下文所针对的归因标签,如果这是默认标签,则返回 null。
Sourcepub fn get_package_resource_path(&self) -> String
pub fn get_package_resource_path(&self) -> String
返回此上下文的主要 Android 包的完整路径。Android 包是一个 ZIP 文件,其中包含应用程序的主要资源。注意:这通常对应用程序没有用,因为它们不应直接访问文件系统。 返回:String 资源路径。
Sourcepub fn get_package_code_path(&self) -> String
pub fn get_package_code_path(&self) -> String
返回此上下文的主要 Android 包的完整路径。Android 包是一个 ZIP 文件,其中包含应用程序的主要代码和资产。 注意:这通常对应用程序没有用,因为它们不应直接访问文件系统。 返回:String 代码和资产的路径。
Sourcepub fn get_system_service(&self, name: String) -> Option<Object>
pub fn get_system_service(&self, name: String) -> Option<Object>
按名称返回系统级服务的句柄。返回对象的类因请求的名称而异。当前可用的名称为:
WINDOW_SERVICE (“window”)
您可以在顶级窗口管理器中放置自定义窗口。返回的对象是 WindowManager。只能从可视上下文(例如 Activity 或使用 createWindowContext(int, Bundle) 创建的上下文)中获取,这些上下文会根据屏幕区域的配置和可视边界进行调整。
LAYOUT_INFLATER_SERVICE (“layout_inflater”)
android.view.LayoutInflater 用于在此上下文中填充布局资源。只能从可视上下文(例如 Activity 或使用 createWindowContext(int, Bundle) 创建的上下文)获取,这些上下文会根据屏幕区域的配置和可视边界进行调整。
ACTIVITY_SERVICE (“activity”)
用于与系统全局活动状态交互的 ActivityManager。
WALLPAPER_SERVICE (“wallpaper”)
android.service.wallpaper.WallpaperService 用于在此上下文中访问壁纸。只能从可视上下文(例如 Activity 或使用 createWindowContext(int, Bundle) 创建的上下文)获取,这些上下文会根据屏幕区域的配置和可视边界进行调整。
POWER_SERVICE (“power”)
一个用于控制电源管理的android.os.PowerManager。
ALARM_SERVICE (“alarm”)
一个 Android 应用程序 AlarmManager,用于在您选择的时间接收意图。
NOTIFICATION_SERVICE (“notification”)
android.app.NotificationManager,用于通知用户后台事件。
KEYGUARD_SERVICE (“keyguard”)
一个用于控制键盘锁的 android.app.KeyguardManager。
LOCATION_SERVICE (“location”)
android.location.LocationManager 用于控制位置(例如 GPS)更新。
SEARCH_SERVICE (“search”)
一个用于处理搜索的android.app.SearchManager。
VIBRATOR_MANAGER_SERVICE (“vibrator_manager”)
android.os.VibratorManager,用于访问设备振动器、与各个振动器交互以及在多个振动器上播放同步效果。
VIBRATOR_SERVICE (“vibrator”)
一个android.os.Vibrator,用于与振动器硬件进行交互。
CONNECTIVITY_SERVICE (“connectivity”)
用于处理网络连接管理的 ConnectivityManager。
IPSEC_SERVICE (“ipsec”)
IpSecManager 用于管理套接字和网络上的 IPSec。
WIFI_SERVICE (“wifi”)
用于管理 Wi-Fi 连接的 WifiManager。在 Android 7 之前的版本中,应仅从应用上下文中获取它,而不能从任何其他派生上下文中获取它,以避免调用过程中出现内存泄漏。
WIFI_AWARE_SERVICE (“wifiaware”)
WifiAwareManager 用于管理 Wi-Fi Aware 发现和连接。
WIFI_P2P_SERVICE (“wifip2p”)
WifiP2pManager 用于管理 Wi-Fi Direct 连接。
INPUT_METHOD_SERVICE (“input_method”)
用于管理输入方法的 InputMethodManager。
UI_MODE_SERVICE (“uimode”)
一个用于控制 UI 模式的 android.app.UiModeManager。
DOWNLOAD_SERVICE (“download”)
用于请求 HTTP 下载的 android.app.DownloadManager
BATTERY_SERVICE (“batterymanager”)
用于管理电池状态的 android.os.BatteryManager
JOB_SCHEDULER_SERVICE (“taskmanager”)
一个用于管理计划任务的android.app.job.JobScheduler
NETWORK_STATS_SERVICE (“netstats”)
用于查询网络使用情况统计数据的 NetworkStatsManager。
HARDWARE_PROPERTIES_SERVICE (“hardware_properties”)
用于访问硬件属性的 android.os.HardwarePropertiesManager。
DOMAIN_VERIFICATION_SERVICE (“domain_verification”)
android.content.pm.verify.domain.DomainVerificationManager,用于访问 Web 域批准状态。
DISPLAY_HASH_SERVICE (“display_hash”)
android.view.displayhash.DisplayHashManager 用于管理显示哈希。
注意:通过此 API 获取的系统服务可能与获取它们的上下文密切相关。一般来说,不要在各种不同的上下文(活动、应用程序、服务、提供商等)之间共享服务对象。
注意:PackageManager.isInstantApp() 返回 true 的免安装应用无法访问以下系统服务:DEVICE_POLICY_SERVICE、FINGERPRINT_SERVICE、KEYGUARD_SERVICE、SHORTCUT_SERVICE、USB_SERVICE、WALLPAPER_SERVICE、WIFI_P2P_SERVICE、WIFI_SERVICE、WIFI_AWARE_SERVICE。对于这些服务,此方法将返回 null。通常,如果您以免安装应用的形式运行,则应始终检查此方法的结果是否为 null。
注意:在实现此方法时,请记住可以在较新的 Android 版本中添加新服务,因此如果您只是在寻找上面提到的明确名称,请确保在您无法识别该名称时返回 null — 如果您抛出 RuntimeException 异常,您的应用可能会在新的 Android 版本上中断。
返回:如果名称不存在则返回 null。
name
所需服务的名称。
将现有的共享首选项文件从给定的源存储上下文移动到此上下文。这通常用于升级后在存储位置之间迁移数据,例如移至设备保护的存储。
返回:如果动作成功,或者如果在源上下文中不存在共享偏好,则为false。
source_context
包含现有共享首选项的源上下文。
name
共享首选项文件的名称。
删除现有的共享首选项文件。
返回:如果共享首选项文件已成功删除,则返回 true;否则返回 false。
name
共享首选项文件的名称(在应用程序包中是唯一的)。
Sourcepub fn delete_file(&self, name: String) -> bool
pub fn delete_file(&self, name: String) -> bool
删除与此 Context 的应用程序包关联的给定私有文件。
返回:如果文件已成功删除,则返回 true;否则返回 false。
name
要删除的文件的名称;不能包含路径分隔符。
Sourcepub fn get_file_stream_path(&self, name: String) -> File
pub fn get_file_stream_path(&self, name: String) -> File
返回文件系统中存储使用 openFileOutput 创建的文件的绝对路径。如果调用应用程序移动到采用的存储设备,则返回的路径可能会随时间而变化,因此只应保留相对路径。
返回:给定文件的绝对路径。
name
您想要获取其路径的文件的名称。
返回文件系统中存储使用 getSharedPreferences(String, int) 创建的文件的绝对路径。如果调用应用程序移动到采用的存储设备,则返回的路径可能会随时间而变化,因此只应保留相对路径。
返回:给定文件的绝对路径。
name
您想要获取其路径的共享首选项的名称。
Sourcepub fn get_data_dir(&self) -> File
pub fn get_data_dir(&self) -> File
返回文件系统中存储此应用所有私有文件的目录的绝对路径。应用不应直接使用此路径;而应使用 getFilesDir()、getCacheDir()、getDir(String, int) 或此类上的其他存储 API。 如果调用应用移动到已采用的存储设备,则返回的路径可能会随时间而变化,因此只应保留相对路径。调用应用无需额外权限即可读取或写入返回路径下的文件。
Sourcepub fn get_files_dir(&self) -> File
pub fn get_files_dir(&self) -> File
返回文件系统中存储使用 openFileOutput 创建的文件的目录的绝对路径。如果调用应用程序移动到采用的存储设备,则返回的路径可能会随时间而变化,因此只应保留相对路径。 调用应用程序无需额外权限即可读取或写入返回路径下的文件。保存应用程序文件的目录的路径。
Sourcepub fn get_crate_dir(&self, crate_id: String) -> File
pub fn get_crate_dir(&self, crate_id: String) -> File
返回与文件系统上的 crate 相关的目录的绝对路径。crate_id
需要经过验证的文件名。它不能包含任何“..”、“.”、File.separatorChar 等。
如果调用应用程序移动到采用的存储设备,则返回的路径可能会随时间而变化,因此只应保留相对路径。调用应用程序无需额外权限即可读取或写入返回路径下的文件。
返回:crate 目录文件。
crate_id
getDataDir()/ crates 下的经过验证的相对文件名
Sourcepub fn get_no_backup_files_dir(&self) -> File
pub fn get_no_backup_files_dir(&self) -> File
返回文件系统上目录的绝对路径,类似于 getFilesDir()。不同之处在于,放置在此目录下的文件将被排除在自动备份到远程存储之外。 有关 Android 中自动备份机制的完整讨论,请参阅 BackupAgent。如果调用应用程序移动到采用的存储设备,则返回的路径可能会随时间而变化,因此只应保留相对路径。 调用应用程序无需额外权限即可读取或写入返回路径下的文件。 返回:包含不会自动备份到远程存储的应用程序文件的目录的路径。
Sourcepub fn get_external_files_dir(&self, type: Option<String>) -> Option<File>
pub fn get_external_files_dir(&self, type: Option<String>) -> Option<File>
返回主共享/外部存储设备上目录的绝对路径,应用程序可在该目录中放置其拥有的持久文件。这些文件是应用程序内部的,通常不作为媒体对用户可见。
这与 getFilesDir() 类似,因为这些文件将在应用程序卸载时被删除,但存在一些重要区别:共享存储可能并非始终可用,因为用户可以弹出可移动媒体。可以使用 Environment.getExternalStorageState(File) 检查媒体状态。
这些文件没有强制执行安全性。例如,任何拥有 android.Manifest.permission.WRITE_EXTERNAL_STORAGE 的应用程序都可以写入这些文件。
如果共享存储设备是模拟的(由 Environment.isExternalStorageEmulated(File) 确定),则其内容由私有用户数据分区支持,这意味着将数据存储在此处而不是 getFilesDir() 返回的私有目录中几乎没有好处。
从 Build.VERSION_CODES.KITKAT开始,无需任何权限即可读取或写入返回的路径;调用应用程序始终可以访问它。这仅适用于为调用应用程序的软件包名称生成的路径。
要访问属于其他软件包的路径,需要 android.Manifest.permission.WRITE_EXTERNAL_STORAGE 和/或 android.Manifest.permission.READ_EXTERNAL_STORAGE。
在具有多个用户的设备上(如 UserManager 所述),每个用户都有自己独立的共享存储。应用程序只能访问他们以该用户身份运行的共享存储。
如果插入了不同的共享存储介质,则返回的路径可能会随时间而变化,因此只应保留相对路径。以下是操作应用程序共享存储中的文件的典型代码示例:
@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java private_file
如果您为此函数提供非空类型,则返回的文件将是指向给定类型的子目录的路径。虽然媒体扫描仪不会自动扫描这些文件,但您可以使用 MediaScannerConnection.scanFile 将它们明确添加到媒体数据库。
请注意,这与 Environment.getExternalStoragePublicDirectory() 不同,后者提供所有应用程序共享的媒体目录。此处返回的目录归应用程序所有,卸载应用程序时将删除其内容。
与 Environment.getExternalStoragePublicDirectory() 不同,此处返回的目录将自动为您创建。以下是操作应用程序共享存储中的图片并将其添加到媒体数据库的典型代码示例:
@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java private_picture
返回:应用程序特定目录的绝对路径。如果共享存储当前不可用,则可能返回 null。
type
要返回的文件目录的类型。对于文件目录的根目录,可能为 null;对于子目录,可能为以下常量之一:
Environment.DIRECTORY_MUSIC、Environment.DIRECTORY_PODCASTS、Environment.DIRECTORY_RINGTONES、Environment.DIRECTORY_ALARMS、Environment.DIRECTORY_NOTIFICATIONS、Environment.DIRECTORY_PICTURES 或 Environment.DIRECTORY_MOVIES。
Sourcepub fn get_obb_dir(&self) -> Option<File>
pub fn get_obb_dir(&self) -> Option<File>
返回可找到此应用程序的 OBB 文件(如果有)的主要共享/外部存储目录。请注意,如果应用程序没有任何 OBB 文件,则此目录可能不存在。 这与 getFilesDir() 类似,当应用程序卸载时这些文件将被删除,但也存在一些重要的区别: 共享存储可能并不总是可用,因为用户可以弹出可移动媒体。可以使用 Environment.getExternalStorageState(File) 检查媒体状态。 这些文件没有强制实施安全性。例如,任何持有 android.Manifest.permission.WRITE_EXTERNAL_STORAGE 的应用程序都可以写入这些文件。 从 Build.VERSION_CODES.KITKAT 开始,无需任何权限即可读取或写入此方法返回的路径。但是,从 Build.VERSION_CODES.M 开始,要读取 OBB 扩展文件,您必须在应用清单中声明 android.Manifest.permission.READ_EXTERNAL_STORAGE 权限,并在运行时请求权限,如下所示: <uses-permission android:name=“android.permission.READ_EXTERNAL_STORAGE” android:maxSdkVersion=“23” /> 从 Build.VERSION_CODES.N 开始,android.Manifest.permission.READ_EXTERNAL_STORAGE 权限不再需要,因此不要在运行时请求此权限。要处理这两种情况,您的应用必须先尝试读取 OBB 文件,如果失败,您必须在运行时请求 android.Manifest.permission.READ_EXTERNAL_STORAGE 权限。以下代码片段显示了如何执行此操作: File obb = new File(obb_filename); boolean open_failed = false; try { BufferedReader br = new BufferedReader(new FileReader(obb)); open_failed = false; ReadObbFile(br); } catch (IOException e) { open_failed = true; } if (open_failed) { // 读取 OBB 文件之前请求 READ_EXTERNAL_STORAGE 权限 ReadObbFileWithPermission(); } 在具有多个用户的设备上(如 UserManager 所述),多个用户可能共享同一个 OBB 存储位置。应用程序应确保在不同用户下运行的多个实例不会互相干扰。 返回:应用程序特定目录的绝对路径。如果共享存储当前不可用,则可能返回 null。
Sourcepub fn get_cache_dir(&self) -> File
pub fn get_cache_dir(&self) -> File
返回文件系统上应用程序特定缓存目录的绝对路径。系统将自动删除此目录中的文件,因为设备上的其他地方需要磁盘空间。 系统将始终首先删除较旧的文件,如 File.lastModified() 所报告的。如果需要,您可以使用 StorageManager.setCacheBehaviorGroup(File, boolean) 和 StorageManager.setCacheBehaviorTombstone(File, boolean) 对文件的删除方式进行更多控制。 强烈建议应用程序将其缓存空间使用量保持在 StorageManager.getCacheQuotaBytes(java.util.UUID) 返回的配额以下。如果您的应用程序超出此配额,则在需要额外磁盘空间时,您的缓存文件将是第一批被删除的文件。 相反,如果您的应用程序保持在此配额以下,则在需要额外磁盘空间时,您的缓存文件将是最后被删除的文件。请注意,您的缓存配额将随着时间的推移而变化,具体取决于用户与您的应用程序交互的频率以及系统范围磁盘空间的使用量。 如果调用应用程序移至已采用的存储设备,则返回的路径可能会随时间而变化,因此只应保留相对路径。应用程序不需要额外的权限来读取或写入返回的路径,因为此路径位于其私有存储中。 返回:保存应用程序缓存文件的目录的路径。
Sourcepub fn get_code_cache_dir(&self) -> File
pub fn get_code_cache_dir(&self) -> File
返回文件系统上用于存储缓存代码的应用程序特定缓存目录的绝对路径。当您的特定应用程序升级时以及整个平台升级时,系统都会删除存储在此位置的所有文件。 此位置最适合存储应用程序在运行时生成的编译或优化代码。如果调用应用程序移动到采用的存储设备,则返回的路径可能会随时间而变化,因此只应保留相对路径。 应用程序不需要额外的权限来读取或写入返回的路径,因为此路径位于其私有存储中。 返回:保存应用程序代码缓存文件的目录的路径。
Sourcepub fn get_external_cache_dir(&self) -> Option<File>
pub fn get_external_cache_dir(&self) -> Option<File>
返回主共享/外部存储设备上应用程序特定目录的绝对路径,应用程序可将其拥有的缓存文件放置在该目录中。这些文件是应用程序内部的,通常不会作为媒体对用户可见。 这与 getCacheDir() 类似,因为这些文件将在应用程序卸载时被删除,但存在一些重要区别:平台并不总是监控共享存储中的可用空间,因此可能不会自动删除这些文件。应用程序应始终管理此位置使用的最大空间。 目前,平台只会在 Build.VERSION_CODES.JELLY_BEAN_MR1 或更高版本上运行且 Environment.isExternalStorageEmulated(File) 返回 true 时删除此处的文件。共享存储可能并非始终可用,因为用户可以弹出可移动媒体。 可以使用 Environment.getExternalStorageState(File) 检查媒体状态。这些文件没有强制执行安全性。例如,任何拥有 android.Manifest.permission.WRITE_EXTERNAL_STORAGE的应用程序可以写入这些文件。 如果共享存储设备是模拟的(由 Environment.isExternalStorageEmulated(File) 确定),则其内容由私有用户数据分区支持,这意味着将数据存储在此处而不是 getCacheDir() 返回的私有目录中几乎没有好处。 从 Build.VERSION_CODES.KITKAT 开始,无需任何权限即可读取或写入返回的路径;调用应用程序始终可以访问它。这仅适用于为调用应用程序的软件包名称生成的路径。 要访问属于其他软件包的路径,需要 android.Manifest.permission.WRITE_EXTERNAL_STORAGE 和/或 android.Manifest.permission.READ_EXTERNAL_STORAGE。在具有多个用户的设备上(如 UserManager 所述),每个用户都有自己独立的共享存储。 应用程序只能访问他们以该用户身份运行的共享存储。如果插入不同的共享存储介质,则返回的路径可能会随时间而变化,因此只应保留相对路径。 返回:应用程序特定目录的绝对路径。如果共享存储当前不可用,则可能返回 null。
Sourcepub fn get_preloads_file_cache(&self) -> Option<File>
pub fn get_preloads_file_cache(&self) -> Option<File>
返回预加载缓存中应用程序特定目录的绝对路径。当设备存储空间不足时,可以删除存储在缓存目录中的文件。无法保证何时删除这些文件。
Sourcepub fn get_dir(&self, name: String, mode: i32) -> File
pub fn get_dir(&self, name: String, mode: i32) -> File
查询(如果需要)创建一个新目录,应用程序可以在其中放置其自己的自定义数据文件。您可以使用返回的 File 对象创建和访问此目录中的文件。
请注意,通过 File 对象创建的文件只能由您自己的应用程序访问;您只能设置整个目录的模式,而不能设置单个文件的模式。
如果调用应用程序移动到采用的存储设备,则返回的路径可能会随之变化,因此只应保留相对路径。应用程序不需要额外的权限来读取或写入返回的路径,因为此路径位于其私有存储中。
返回:请求的目录的 File 对象。如果目录尚不存在,则将创建该目录。
name
要查询的目录的名称。这是作为应用程序数据的一部分创建的目录。
mode
操作模式。
Sourcepub fn move_database_from(&self, source_context: &Self, name: String) -> bool
pub fn move_database_from(&self, source_context: &Self, name: String) -> bool
将现有数据库文件从给定的源存储上下文移动到此上下文。这通常用于在升级后在存储位置之间迁移数据,例如迁移到受设备保护的存储。移动数据库之前必须关闭数据库。
返回:如果移动成功或源上下文中不存在数据库,则返回 true,否则返回 false。
source_context
包含要移动的现有数据库的源上下文。
name
数据库文件的名称。
Sourcepub fn get_database_path(&self, name: String) -> File
pub fn get_database_path(&self, name: String) -> File
返回文件系统上存储使用 openOrCreateDatabase 创建的数据库的绝对路径。如果调用应用程序移动到采用的存储设备,则返回的路径可能会随时间而变化,因此只应保留相对路径。
返回:给定数据库的绝对路径。
name
您想要获取其路径的数据库的名称。
Sourcepub fn start_service(
&self,
service: &Intent,
) -> Result<ComponentName, <Self as JType>::Error>
pub fn start_service( &self, service: &Intent, ) -> Result<ComponentName, <Self as JType>::Error>
请求启动给定的应用服务。Intent 应包含要启动的特定服务实现的完整类名,或要定位的特定包名。 如果 Intent 指定的内容较少,则会记录有关此情况的警告。在这种情况下,可以使用多个匹配的服务中的任何一个。 如果此服务尚未运行,它将被实例化并启动(如果需要,为其创建一个进程);如果它正在运行,则它将保持运行状态。 每次调用此方法都将导致对目标服务的 android.app.Service.onStartCommand 方法的相应调用,并带有此处给出的意图。 这提供了一种向服务提交作业的便捷方式,而无需绑定并调用其接口。使用 startService() 会覆盖 bindService 管理的默认服务生命周期:它要求服务保持运行,直到调用 stopService,无论是否有任何客户端连接到它。 请注意,对 startService() 的调用不会嵌套:无论您调用 startService() 多少次,对 stopService 的一次调用都会停止它。 系统会尝试尽可能地保持服务运行。只有在当前前台应用程序使用的资源太多而需要终止服务时,才应停止服务。如果服务进程中发生任何错误,它将自动重新启动。 如果您无权启动给定的服务,此函数将抛出 SecurityException。 注意:每次调用 startService() 都会导致系统完成大量工作来管理围绕意图处理的服务生命周期,这可能需要数毫秒的 CPU 时间。 由于此成本,startService() 不应用于频繁向服务传递意图,而应仅用于安排重要工作。对高频调用使用绑定服务。 从 SDK 版本 Build.VERSION_CODES.O 开始,以 SDK 版本 Build.VERSION_CODES.O 或更高版本为目标的应用不允许从后台启动后台服务。有关更多详细信息,请参阅后台执行限制。 注意:从 SDK 版本 Build.VERSION_CODES.S 开始,以 SDK 版本 Build.VERSION_CODES.S 为目标的应用S 或更高版本的 Android 不允许从后台启动前台服务。有关更多详细信息,请参阅行为变更:针对 Android 12 的应用。 返回:如果服务正在启动或已在运行,则返回已启动的实际服务的 ComponentName;否则,如果服务不存在,则返回 null。 抛出:
- SecurityException – 如果调用者无权访问服务或找不到服务。
- IllegalStateException – Android Build.VERSION_CODES.S 之前,如果应用程序处于无法启动服务的状态(例如,在允许服务的状态下不在前台),则抛出 IllegalStateException。
- BackgroundServiceStartNotAllowedException – Android Build.VERSION_CODES。 S 及更高版本中,如果应用程序处于无法启动服务的状态(比如在允许服务的状态下未处于前台),则会引发 android.app.BackgroundServiceStartNotAllowedException。此豁免扩展了 IllegalStateException,因此应用程序可以使用 catch(IllegalStateException) 来捕获这两者。
service
标识要启动的服务。Intent 必须完全明确(提供组件名称)。Intent extras 中可以包含其他值,以提供与此特定启动调用一起的参数。
Sourcepub fn check_self_permission(&self, permission: String) -> i32
pub fn check_self_permission(&self, permission: String) -> i32
确定您是否被授予了特定权限。
如果您拥有该权限,则返回:PackageManager.PERMISSION_GRANTED;如果没有,则返回:PackageManager.PERMISSION_DENIED。
permission
正在检查的权限的名称。
Sourcepub fn check_calling_permission(&self, permission: String) -> i32
pub fn check_calling_permission(&self, permission: String) -> i32
确定您正在处理的 IPC 的调用进程是否已被授予特定权限。这与使用 android.os.Binder.getCallingPid 和 android.os.Binder.getCallingUid 返回的 pid 和 uid 调用 checkPermission(String, int, int) 基本相同。
一个重要的区别是,如果您当前没有处理 IPC,则此函数将始终失败。这样做是为了防止意外泄露权限;您可以使用 checkCallingOrSelfPermission 来避免这种保护。
返回:如果调用 pid/uid 被允许该权限,则返回 PackageManager.PERMISSION_GRANTED,否则返回 PackageManager.PERMISSION_DENIED。
permission
正在检查的权限的名称。