我正在使用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();
}
}
}
}
答案 0 :(得分:1)
在上面的问题中
SharedPreferences prefs = getSharedPreferences(getPackageName() , MODE_PRIVATE);
prefs.getstring("key");
将在应用程序中的任何地方从SharedPreferences中提供您保存的字符串。
如果您愿意,可以通过下面给出的其他解决方案进行优化
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();
}
}