如何从共享首选项获取软件包名称?
问题描述:
我正在使用appLocker,我必须在已安装的设备应用程序上设置密码。 为此,我创建了一个列表,其中获取了所有已安装的应用程序。用户可以通过使用checkBox选择应用程序并在其上设置密码。为此,我必须获取该应用程序的包名称。我能够获取所选应用程序的包名称,并使用“共享首选项”保存它们。现在我必须在另一个活动中获取该包名称。请告诉我如何获得该信息。如何从共享首选项获取软件包名称?
这是我得到包名的代码。
public void onClick(View v) {
if (R.id.select_done_btn == v.getId()) {
SharedPreferences prefs = getSharedPreferences(getPackageName(), MODE_PRIVATE);
int[] indexes = appListAdapter.getSelectedItemIndexes();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < indexes.length; ++i) {
AppInfo appInfo = installedApps.get(indexes[i]);
sb.append(appInfo.getPackageName()).append(";");
}
Editor editor = prefs.edit();
editor.putString("lock_apps", sb.toString());
editor.commit();
这个代码部分,在那里我得到那个包名称锁定在另一个活动所选择的应用程序..
public void run() {
while (true) {
Log.i("lock", "lockerThread run.");
String packname = activityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
if ("**PACKAGE NAME**".equals(packname)) {
startActivity(pwdIntent);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
答
在上面的问题
SharedPreferences prefs = getSharedPreferences(getPackageName() , MODE_PRIVATE);
prefs.getstring("key");
会给从SharedPreferences中保存的字符串,您可以在Application中找到它。
如果你喜欢你可以通过以下给出优化
public void addTask(Task t) {
if (null == currentTasks) {
currentTasks = new ArrayList<task>();
}
currentTasks.add(t);
//save the task list to preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
Editor editor = prefs.edit();
try {
editor.putString(TASKS, ObjectSerializer.serialize(currentTasks));
} catch (IOException e) {
e.printStackTrace();
}
editor.commit();
}
其他解决方案同样,我们可以从里面的onCreate优先检索任务列表()方法:
public void onCreate() {
super.onCreate();
if (null == currentTasks) {
currentTasks = new ArrayList<task>();
}
// load tasks from preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
try {
currentTasks = (ArrayList<task>) ObjectSerializer.deserialize(prefs.getString(TASKS, ObjectSerializer.serialize(new ArrayList<task>())));
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
使用sharedPref .getString函数 – KOTIOS 2014-10-09 12:27:45
谢谢你的回应Mtetno,但是请你告诉我如何使用它以及在哪里使用它。我的意思是,我可以在这个和平代码中使用它吗? – Devraj 2014-10-09 12:34:39
使用List来代替使用StringBuilder – 2014-10-09 12:47:14