android - 坚持 Android 启动 Intent ?

标签 android android-intent sharedpreferences

我正在创建一个自定义首选项,以记住用户想要从可能列表中运行的 Activity 。 (有效地实现了选择器的“当你看到这种 Intent 时总是启动这个 Activity ”,但特别记住我的特定应用程序的结果,而不是系统范围的结果。)

我得到了这样一个可能的 Activity 列表:

    Intent myIntent = new Intent();
    myIntent.setAction(Intent.ACTION_SEND);
    myIntent.setType("text/plain");    
    myIntent.putExtra(Intent.EXTRA_TEXT, "Probe text");

    PackageManager manager = getContext().getPackageManager();
    List<ResolveInfo> infoList = manager.queryIntentActivities(myIntent,PackageManager.MATCH_DEFAULT_ONLY);

...导致列表 ResolveInfo

我的问题是,一旦我的用户选择了其中之一,将其保留为偏好的最佳方式是什么?也就是说,我要在我的 SharedPreferences 中写入什么(如果可能,在单个项目中),以及在下次运行我的应用程序时,我如何读取它并触发相应的 Intent?

最佳答案

那么,您可以在 Intent 上调用 toUri() 将其转换为 Uri,然后您可以将其转换为String 通过标准的 toString()。要反转该过程,请使用 Intent.parseUri()String 解析为 Intent

但是,您需要添加足够的保护来应对各种可能性,例如:

  • 用户删除了应用
  • 用户升级了应用,应用不再支持你保存的Intent

此外,请小心放置探针(文本)的位置。 :-)

关于android - 坚持 Android 启动 Intent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9784804/

相关文章:

java - 听取偏好变化

java - 应用程序关闭后存储整数值并检索它

java - GSON:如何从 json 解码为忽略对象的模型?

java - Android内部存储读取文件

android - 我可以以 root 身份启动 android intent 吗?

android - Health Connect - 以编程方式打开应用程序

android - 更新到 Android Studio 3.2 后,Gradle 同步失败,没有特定错误 - Android Gradle 插件 3.2.0

android - GridView 可以有跨越一行或多行的列吗

android - Intent extras 没有改变

java - 从 EditText 中的共享首选项加载字符串(两个类)