SharedPreferences读取其他应用程序的信息

阿卧 2015-09-19 07:51:21
在学习demo的时候,遇到这样一个问题。定义一个名字为CountDemo的应用程序,用于计数应用程序打开的次数。并将数据存储到SharedPreferences的文件中。再定义一个ModifyDemo来获取CountDemo应用程序中的文件,并将文件中的数据返回出来。
代码如下:

preferences = useCount.getSharedPreferences("count",Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
int count = preferences.getInt("count", 10);
Toast.makeText(this, useCount + "应用被打开了" + count + "次", Toast.LENGTH_LONG).show();

可是返回的数据一直是默认的数据10,并不是CountDemo文件中的数据。
SharedPreferences真的可以修改其他应用程序中的数据吗?具体该怎么做?求大神帮忙。
下面是我写的demo,demo就只含有一个Activity。
modifyotherfile应用程序中的代码,用于读取其他应用程序中的数据

package lzl.edu.com.modifyotherfile;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity {

/**
* 2、读写其他应用程序的SharedPreferences数据。首先那个程序的
数据应该设置为MODE_WORLD_READABLE 设置可读取
MODE_WORLD_WRITABLE 设置可写
1)创建其他应用的Context
useCount = createPackageContext(
"包名",Context.CONTEXT_IGNORE_SECURITY);
2)获得其他应用SharedPreferences实例。
3)调用SharedPreferences相应的读写方法。
* @param savedInstanceState
*/
Context useCount;
SharedPreferences preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取其他应用程序的Context对象
try {
useCount = createPackageContext("lzl.edu.com.countdemos", Context.CONTEXT_IGNORE_SECURITY);
}catch (Exception e){
e.printStackTrace();
}
//获得其他应用SharedPreferences实例。设置可读操作
preferences = useCount.getSharedPreferences("count",Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
int count = preferences.getInt("count", 10);
Toast.makeText(this, useCount + "应用被打开了" + count + "次", Toast.LENGTH_LONG).show();
/* //将次数修改成1
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("count",1);*/
}
}

modifyotherfile中的代码,向文件中写入数据

package lzl.edu.com.countdemos;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class MainActivity extends Activity {
/**
获得该应用程序被打开多少次
首先在应用第一次打开时,设置一个计数器Count,并将该计数器写入到SharedPreferences中。
在每次打开应用时都将Count+1
* @param savedInstanceState
*/
SharedPreferences preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//设置程序文件可悲更改
preferences = getSharedPreferences("count", Context.MODE_WORLD_READABLE);
int count = preferences.getInt("count",0);
Toast.makeText(MainActivity.this,"该软件被打开了"+count+"次",5000).show();
//从找出count文件,并设置+1
SharedPreferences.Editor editor = preferences.edit();
count++;
editor.putInt("count",count);
//提交数据
editor.commit();
}

}
...全文
177 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿卧 2015-09-19
  • 打赏
  • 举报
回复
我之前是设置Context.MODE_WORLD_READABLE ,也不能实现,后来在网上见到这种写法也改了一下,可是还是不行。 也没有改过来。之前见一个人写过类似的功能,也出现同样的问题。不知道他解决了没有。
阿飞__ 2015-09-19
  • 打赏
  • 举报
回复
你把模式设置为MODE_WORLD_WRITEABLE就是可读可写了。 Context.MODE_PRIVATE = 0 Context.MODE_APPEND = 32768 Context.MODE_WORLD_READABLE = 1 Context.MODE_WORLD_WRITEABLE = 2 它们都是Int值,你把它们加起来不就等于3了么,我是这么理解的

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧