2017-06-05 57 views
0

我需要訪問另一個應用程序的共享偏好文件。 (該設備已植根!)目前,我似乎正面臨許可問題。下面是我運行當前的代碼:閱讀另一個Android應用程序的共享偏好

Context con = createPackageContext("com.sam.sample", CONTEXT_IGNORE_SECURITY); 
SharedPreferences sharedPref = con.getSharedPreferences("namefile", MODE_PRIVATE); 
Map data = sharedPref.getString("name", ""); 
Log.d("Name", "name:" + name); 

當我運行這段代碼,我得到了以下錯誤:

Attempt to read preferences file /data/data/com.sam.sample/shared_prefs/namefile.xml without permission

我也想跑su命令,但我不希望用戶可以通知我想要在XML文件上使用chmod 775讀取訪問權限。

任何幫助表示讚賞。

回答

1

要在「com.sam.sample」中創建SharedPreference時執行此操作,它應該使用Context.MODE_WORLD_READABLE模式創建。所以,如果你有「com.sam.sample」應用程序的代碼,它應該看起來像下面

SharedPreferences prefs = getSharedPreferences("namefile", 
       Context.MODE_WORLD_READABLE); 
     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putString("name", strShareValue); 
     editor.commit(); 

另外請注意,改變模式Context.MODE_WORLD_READABLE不推薦,因爲它可能會導致安全漏洞。從NOS開始,這將引發SecurityException。更多信息: -

https://developer.android.com/reference/android/content/Context.html#MODE_WORLD_READABLE

理想的ContentProvider應該被使用。

爲了您的ContentProvider的例子查詢功能可以

MatrixCursor cursor = new MatrixCursor(new String[] { "name" }, 1); cursor.addRow(new Object[] { readSharedPreference() }); return cursor;

+0

有沒有辦法,我可以用ContentResolver的訪問SharedPreferences的方法嗎? –

+0

是的只是返回具有來自ContentProvider的查詢函數的共享偏好數據的光標(通常是MatrixCursor)。在修改的答案中查看示例查詢功能 – AnswerBot