如何从共享首选项获取软件包名称?

问题描述:

我正在使用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

使用sharedPref .getString函数 – KOTIOS 2014-10-09 12:27:45

+0

谢谢你的回应Mtetno,但是请你告诉我如何使用它以及在哪里使用它。我的意思是,我可以在这个和平代码中使用它吗? – Devraj 2014-10-09 12:34:39

+0

使用List来代替使用StringBuilder – 2014-10-09 12:47:14

在上面的问题

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