如何从共享偏好中获取包名称?

时间:2014-10-09 12:26:11

标签: android android-activity sharedpreferences packages

我正在使用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();
            }
        }
    }
}

1 个答案:

答案 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();
            }
        }