我需要一个在卸载并重新安装应用程序后仍然存在的设备标识符。我知道 UUID 类为该方法提供了一个标识符
String uniqueID = UUID.randomUUID().toString();
Run Code Online (Sandbox Code Playgroud)
但 Android 指南对其范围和持久性尚不清楚。在下一段它说:
Android 操作系统提供了许多具有不同行为特征的 ID,您应该使用哪个 ID 取决于以下特征如何与您的用例配合使用。但这些特征也伴随着隐私问题,因此了解这些特征如何共同发挥作用非常重要。
范围
标识符范围解释了哪些系统可以访问标识符。Android 标识符范围通常分为三种:
单个应用程序。ID 是应用程序内部的,其他应用程序无法访问。
应用程序组- 一组预定义的相关应用程序可以访问该 ID。
设备- 该 ID 可供设备上安装的所有应用程序访问。授予标识符的范围越广,其被用于跟踪目的的风险就越大。相反,如果标识符只能由单个应用程序实例访问,则它不能用于跨不同应用程序中的事务跟踪设备。
可重置性和持久性
可重置性和持久性定义了标识符的生命周期并解释了如何重置它。常见的重置触发器有:应用内重置、通过系统设置重置、启动时重置和安装时重置。Android 标识符可以有不同的生命周期,但生命周期通常与 ID 的重置方式有关:
仅会话- 每次用户重新启动应用程序时都会使用一个新 ID。
安装-重置- 每次用户卸载和重新安装应用程序时都会使用一个新 ID。
FDR 重置- 每次用户对设备进行出厂重置时都会使用一个新 ID。
FDR 持久性- ID 在出厂重置后仍然有效。
可重置性使用户能够创建与任何现有配置文件信息无关的新 ID。这很重要,因为标识符持续的时间越长、越可靠(例如跨出厂重置等),用户可能受到长期跟踪的风险就越大。如果在重新安装应用程序时重置标识符,这会减少持久性并提供重置 ID 的方法,即使没有明确的用户控制从应用程序或系统设置中重置它。
但是我不知道如何获取这些标识符,选择我的范围和持久性。谢谢
我需要在我的 SearchView 是否折叠时进行拦截,以便更改我的 Activity 中的某些片段,即 AppCompatActivity。我使用MenuItemCompat.setOnActionExpandListener方法创建了一个侦听器,但似乎从未调用过它。同样奇怪的是,在我的方法onOptionsItemSelected 中,经过一些调试后,我检查了一下,仍然在这里我什么也无法接受。我尝试了这里建立的各种方法来解决这个问题,但没有办法解决它。这是我的代码:
menu_search_cat.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".CategoriesActivity">
<item android:id="@+id/search"
android:title="@string/search_title"
android:orderInCategory="1"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="always"
app:actionViewClass="android.widget.SearchView" />
Run Code Online (Sandbox Code Playgroud)
分类活动
import android.widget.SearchView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_categories);
...
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_search_cat, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
final SearchView searchView =
(SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
searchView.setOnQueryTextListener(this);
MenuItem searchItem = …Run Code Online (Sandbox Code Playgroud)