SharedPreferences具体使用方法及createPackageContext方法(获取其他应用的共享文件)

Context的createPackageContext用法 createPackageContext和createApplicationContext用法. java.lang.SecurityException: Requesting code from com.xsq.testdemo (with uid 10191) to be run in process com.start.testdemo (with uid 10185) 阅读详情

很多时候我们开发的软件需要向用户提供软件参数设置功能,Android应用,我们最适合采用什么方式保存软件配置参数呢?在Android平台上,提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,使用简易的键值对存储。文件存放在/data/data/<packagename>/shared_prefs目录下

下面我们给点代码,说下简单的使用:

[java]  view plain copy
  1. //文件命名为demo,私有模式  
  2. SharedPreferences sharedPreferences = getSharedPreferences("demo", Context.MODE_PRIVATE);  
  3. Editor editor = sharedPreferences.edit();//获取编辑器  
  4. editor.putString("name", "hello");  
  5. editor.putInt("age", 6);  
  6. editor.commit();//提交修改  
这样,我们就把信息存储到了 /data/data/<packagename>/shared_prefs/demo.xml文件里面,现在你打开这个文件,就可以看到内容已经被存储。如下:

[html]  view plain copy
  1. <?xml version='1.0' encoding='utf-8' standalone='yes' ?>  
  2. <map>  
  3. <string name="name">hello</string>  
  4. <int name="age" value="6" />  
  5. </map>  
getSharedPreferences(name,mode)方法的第一个参数用于指定该文件的名称,最好定义为一个静态字符串,另外,名称如上面所示,不用带后缀名,后缀名会由系统自动加上。方法的第二个参数指定文件的操作模式,共有四种操作模式,这四种模式想必大家都有一定的了解。这里简单说一下:

MODE_APPEND File creation mode: for use with openFileOutput(String, int), if the file already exists then write data to the end of the existing file instead of erasing it.    如果文件已经存在,在文件内容后面添加。

[html]  view plain copy
  1. MODE_PRIVATE File creation mode: the default mode, where the created file can only be accessed by the calling application (or all applications sharing the same user ID).  
设置为默认模式,在创建的文件只能该应用能够使用(或所有的应用程序共享同一个用户标识号) 。

[html]  view plain copy
  1. MODE_WORLD_READABLE     File creation mode: allow all other applications to have read access to the created file.  

允许其他应用读该应用创建的文件。

[html]  view plain copy
  1. MODE_WORLD_WRITEABLE    File creation mode: allow all other applications to have write access to the created file.  
允许其他应用写该应用创建的文件。

所以,如果你希望SharedPreferences背后使用的xml文件能被其他应用读和写,可以指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。
另外Activity还提供了另一个getPreferences(mode)方法操作SharedPreferences,这个方法默认使用当前类不带包名的类名作为文件的名称。

如果我们的模式设置为Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限,我们其他的应用是可以访问的,下面是其他应用访问的代码(假如上面代码的包名为cn.test.demo):

[html]  view plain copy
  1. try{  
  2.    Context context = createPackageContext("cn.test.demo", Context.CONTEXT_IGNORE_SECURITY);  
  3. <pre name="code" class="html">} catch (NameNotFoundException e)</pre><pre name="code" class="html">{        e.printStackTrace();}</pre><br>SharedPreferences sharedPreferences = context.getSharedPreferences("demo", Context.MODE_WORLD_READABLE); //name 是里面存储的属性名,即:键,后面的参数是如果从sharePreferece里面取不到值,或者不存在该值的时候,获取的默认值。在这里设置为空。<span style="color:#000000;widows:2; text-transform:none; text-indent:0px; border-collapse:separate; font:medium simsun; white-space:normal; orphans:2; letter-spacing:normal; word-spacing:0px"></span><br>String name = sharedPreferences.getString("name", ""); int age = sharedPreferences.getInt("age", 0);<pre></pre><p></p><pre></pre><br>CreatePackageContext这个方法有两个参数:<br>1.packageName 包名,要得到Context的包名<br>2.flags 标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。<p></p><span style="color:#000000;widows:2; text-transform:none; text-indent:0px; border-collapse:separate; font:medium simsun; white-space:normal; orphans:2; letter-spacing:normal; word-spacing:0px">CreatePackageContext方法在找不到包名的时候会报NameNotFoundException异常,所以我们要捕获它。</span><br>  
利用createPackageContext()方法遇到的问题 (1)Context configContext = context.createPackageContext(“com.newmine.settings”, Context.CONTEXT_IGNORE_SECURITY); SharedPreferences configxml = configContext.getSharedPreferences(“config”, 3); 阅读详情

相关推荐

Android数据存储1:文件、SharedPreferences和获取sd卡信息

Android自学笔记-8-Android数据存储1:文件、SharedPreferences和获取sd卡信息

利用createPackageContext()方法实现囊中探物

Context有个createPackageContext方法,可以创建另外一个包的上下文,这个实例不同于它本身的Context实例,但是功能是一样的。       这个方法有两个参数: 1.packageName  包名,要得到Context的包名 2.flags  标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。

fyang的专栏 4557

Android编程获取全局Context的方法

主要介绍了Android编程获取全局Context的方法,实例分析了基于Application类获取全局Context的实现步骤与相关技巧,需要的朋友可以参考下

关于createPackageContext方法的一些理解

最近在项目过程中遇到这个一个问题:在ActivityManagerService里面的getContentProvider出现SecurityException异常,callingPackage和uid不一致 public final ContentProviderHolder getContentProvider( IApplicationThread caller, String callingPackage, String name, int userId,

chadm.xiang 3250

std::map看来可以被淘汰了?可以用vector来替代,而且更好

vector的优势在于内存连续,可以先std::sort,然后std::lower_bound,或者std::binary_search。而std::map,insert的时候,需要new出内存。

tumu_C的博客 1019

gnss变形监测基础(四)

监测站的数据采样率指的是监测站在单位时间内收集数据的频率,通常以赫兹(Hz)为单位。在GNSS变形监测中,数据采样率决定了监测系统能够捕捉到的变形动态变化的详细程度和时间分辨率。例如,一个采样率为1Hz的GNSS监测站意味着它每秒钟收集一次位置数据;而一个采样率为10Hz的监测站则每秒钟收集10次位置数据。较高的采样率能够提供更细致的时间序列数据,有助于分析快速变化的动态过程,如地震活动或建筑物的振动响应。然而,较高的采样率也意味着数据量更大,可能需要更多的存储空间和更强大的数据处理能力。

我的博客 1293

SharedPreferences具体使用方法及createPackageContext方法(获取其他应用的共享文件)...

很多时候我们开发的软件需要向用户提供软件参数设置功能,Android应用,我们最适合采用什么方式保存软件配置参数呢?在Android平台上,提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,使用简易的键值对存储。文件存放在/data/data/&lt;packag...

wangxiaohigh 456

STM32CubeMX、keil、simulink联合开发MCU教程

一、整体思路 利用Matlab的simulink搭建模型生成C代码,通过stm32cubemx生成工程,最后在KEIL或者IAR等工具里面编译生成代码下载至MCU中执行。 本文以流水灯建立模型和简单使用定时器为例进行演示。 二、开发环境 1、安装Matlab Matlab版本建议在2013B以上,本文使用Matlab 2016a。 2、安装STM32硬件支持包 下载地址(https://www.stmcu.org.cn/document/detail/index/id-216053) 安装完成后重启MAT

tzlaa的博客 7736

Android之SharedPreferences(二)——跨程序调用

第一个程序的:  SharedPreferences  preferences = getSharedPreferences("count", MODE_WORLD_READABLE);第二个程序的:  // 获取其他程序所对应的 Context Context  useCount = createPackageContext("org.crazyit.io", Con...

weixin_34257076的博客 81

利用Langchain生成合成数据的实践指南

合成数据是相对于从真实世界事件中收集的数据而言的人工生成的数据。它用于模拟真实数据,同时避免隐私泄露或遇到真实数据中的局限性。:尽管合成数据有诸多优点,但应谨慎使用,因为它可能无法捕捉真实世界的复杂性。

eahba的博客 397

实战指南:利用 LangGraph 的状态管理实现多轮对话的上下文隔离与持久化

本文详细介绍了如何利用LangGraph的状态管理机制,高效实现多轮对话中的上下文隔离与持久化。通过实战代码演示,从基础的消息历史管理到自定义状态扩展,再到使用SQLite进行生产级持久化,系统讲解了如何借助LangGraph的State和Checkpointer自动化处理对话记忆、用户隔离及数据存储,显著提升开发效率。

weixin_28396629的博客 488

Android UID机制全解析:从沙盒隔离到SharedUserId实战

在Android系统中,进程隔离与权限管理是保障应用安全的核心机制。其底层原理基于Linux的用户标识符(UID)体系,通过为每个应用分配唯一的UID,系统实现了文件访问、进程间通信(IPC)和内核资源的沙盒化隔离。这一机制不仅构成了Android安全模型的基石,也直接支撑了Binder IPC、运行时权限等关键技术组件的运作。在实际开发中,当应用需要深度数据共享或高性能进程协作时,开发者可以通过SharedUserId机制让多个应用共享同一个UID,从而突破默认的沙盒限制。然而,这种方案要求所有参与应用必

weixin_34268843的博客 298

​网格划分理论:CFD理论67 网格划分-三大理论问题_哔哩哔哩_bilibili传统解释非结构化网格是不对的——计算传热学大叔专题讨论2--CFD网格类型_哔哩哔哩_bilibili

传统解释非结构化网格是不对的——计算传热学大叔。fluent计算理论和离散方法原理视频推荐。

qq_15963745的博客 183

createPackageContext方法分析----------记一次context的getApplicationContext为空问题

通过createPackageContext方法获取其他应用context,lnflate这个应用的布局视图添加后,此视图context的getApplicationContext为空问题调查。 问题现象: 通过调用createPackageContext方法获取了某个应用的context:remoteContext, 然后通过remoteContext.getResources()获取对于...

ws6013480777777的博客 2885

Horn-Schunck光流算法的Python实现

光流是计算机视觉领域中的一个重要概念,它描述了图像中物体在时间上的运动。Horn-Schunck光流算法是一种经典的光流估计方法,通过对图像的亮度变化进行建模,来估计像素的运动速度。在本文中,我们将使用Python实现Horn-Schunck光流算法,并提供相应的源代码。请注意,该算法假设图像上的亮度变化主要由物体的运动引起,并且假设光流在整个图像上是稠密的。在上面的示例中,我们首先读取了两个输入图像,然后使用我们实现的Horn-Schunck光流算法估计了它们之间的光流。首先,我们需要导入一些必要的库。

持续更新 495

uniapp:实现圆盘/色盘取色器组件,圆环颜色选择器用户可拖拽选择颜色值实时更新用户选择的颜色数据,拖动丝滑流畅不卡顿(uniapp小程序/手机h5网页/安卓苹果app/nvue都能使用,详细源码)

uniapp项目中使用颜色选择器,uniapp实现简单圆形色盘、取色器、拾色器组件,Uniapp自定义颜色选择器取色器,圆形的颜色选择器,uniapp颜色拾取器,拾色器 取色器 颜色选择器,uniapp vue3圆形的色盘取色,uni-app如何封装一个取色器组件,用uniapp写调色板,uniapp颜色选择器插件,实现圆环颜色选择器,Uni-app在App端使用颜色选择器,uniapp微信小程序圆盘颜色选择,uniapp H5网页实现圆形的取色器,使用canvas实现的简单圆形色盘,可自定义相关大小,un

✅ 精选推荐文章 4534

解决E/SharedPreferencesImpl: Couldn‘t create directory for SharedPreferences file /data/user/0/com.exa

Couldn't create directory for SharedPreferences file问题描述:解决方法: E/SharedPreferencesImpl: Couldn't create directory for SharedPreferences file /data/user/0/com.examp 意思为:不能在“/data/user/0/com.example.”目录下创建文件 问题描述: 安装你的app后卡在起始界面或者加载不出来下一界面 解决方法: 手动给你的app存储

lovelry的博客 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: SimpleDateFormat使用详解
下一篇: PrintStream
mywebstudy
博客等级 码龄15年 30粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值