2014-10-09 56 views
1

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

回答

1

在上面的問題

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