【问题标题】:How to get package name from share preference?如何从共享偏好中获取包名称?
【发布时间】:2014-12-04 09:11:44
【问题描述】:

我正在开发 appLocker,我必须在其中设置已安装设备应用程序的密码。 为此,我创建了一个列表,其中包含所有已安装的应用程序。用户可以使用复选框选择应用程序并在其上设置密码。为此,我必须获取该应用程序的包名称。我能够获取所选应用程序的包名称并使用共享首选项保存它们。现在我必须在另一个活动中获取该包名称。请告诉我怎样才能得到它。

这是我获取包名的代码。

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

【问题讨论】:

  • 使用sharedPref.getString函数
  • 感谢您的友好回复 Mtetno,但是您能告诉我如何使用它以及在哪里使用它。我的意思是,我可以在这种和平的代码中使用它吗??
  • 使用 List 而不是使用 StringBuilder
  • @Devraj 只需粘贴此SharedPreferences prefs = getSharedPreferences(getPackageName(), MODE_PRIVATE);,它将声明您的共享首选项,因此您的字符串将为String myPackage=prefs.getString("urKey",null);

标签: android android-activity sharedpreferences packages


【解决方案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();
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多