安卓系统下的目录权限问题
生活随笔
收集整理的這篇文章主要介紹了
安卓系统下的目录权限问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
安卓系統(tǒng)在連接wifi的時候會保存連接的密碼,這一配置信息保存在/data/misc/wifi/wpa_supplicant.conf目錄下。
但是這個目錄需要Root權限才能讀取,但是有個問題是很多root了用戶打開data目錄的時候是空的,用rootexplore打開也是空的
我手中的一個百度小鳥平板用的4.2.2的系統(tǒng)就存在這個問題。
用adb shell命令打開平板目錄嘗試
shell@viewsonic82_6122:/ $ ls /data ls /data opendir failed, Permission denied可以看到/data目錄下的ls 命令被禁用了看下面這個命令
shell@viewsonic82_6122:/ $ cd /data cd /data shell@viewsonic82_6122:/data $ cd misc cd misc shell@viewsonic82_6122:/data/misc $ cd wifi cd wifi /system/bin/sh: cd: /data/misc/wifi: Permission denied可以看到cd命令的前兩層命令正常,再往后面就被禁止使用cd命令了。這個目錄其實是存在的,我們可以通過root把目錄權限改掉,讓它暫時能訪問。
下面是代碼,其中獲得目錄root權限的代碼是直接拿過來用的,在此表示感謝。
1.Activity的代碼
package com.example.readwificfg;import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.List;import android.app.Activity; import android.content.Context; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; import android.os.Bundle; import android.view.View; import android.widget.TextView; import android.widget.Toast;import com.example.readwificfg.service.getRoot;public class MainActivity extends Activity {private TextView tv_result;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv_result = (TextView) findViewById(R.id.tv_result); //獲得前兩個路徑的ROOT權限String path="/data/misc/wifi"; getRoot.upgradeRootPermission(path);path="/data/misc/wifi/wpa_supplicant.conf"; getRoot.upgradeRootPermission(path);} public void readwificfg(View view){try {//逐行讀取wpa_supplicant.conf里的文本內容,存到字符串result中File file = new File("/data/misc/wifi/wpa_supplicant.conf");FileInputStream fls=new FileInputStream(file);BufferedReader br=new BufferedReader(new InputStreamReader(fls));String line=null;StringBuilder result=new StringBuilder();while((line=br.readLine())!=null){result.append(line);result.append("\n");}br.close();//把讀出來的字符串顯示到長文本框中tv_result.setText(result.toString());Toast.makeText(this, "讀取wifi配置文件成功",Toast.LENGTH_SHORT).show();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();Toast.makeText(this, "讀取wifi配置文件失敗,請確保取得ROOT權限", Toast.LENGTH_SHORT).show();}}public void readwificfg2(View view){try {//創(chuàng)建WifiManager實例 WifiManager wfm=(WifiManager) this.getSystemService(Context.WIFI_SERVICE);//獲得配置信息的ListList<WifiConfiguration> configs=wfm.getConfiguredNetworks();StringBuilder result=new StringBuilder();String head="SSID"+"\t"+"密碼"+"\n";result.append(head);//讀每一個配置信息,并加到字符串for(WifiConfiguration config:configs){String str = config.SSID+"\t"+config.preSharedKey+"\n";result.append(str); }tv_result.setText(result.toString());String size=String.valueOf(configs.size());Toast.makeText(this, "讀取wifi配置,節(jié)點數(shù)目"+size, Toast.LENGTH_SHORT).show();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();Toast.makeText(this, "讀取wifi配置失敗", Toast.LENGTH_SHORT).show();}}}2.別人的獲得root權限的代碼 package com.example.readwificfg.service;import java.io.DataOutputStream;public class getRoot {/** * 應用程序運行命令獲取 Root權限,設備必須已破解(獲得ROOT權限) * * @return 應用程序是/否獲取Root權限 */ public static boolean upgradeRootPermission(String pkgCodePath) { Process process = null; DataOutputStream os = null; try { String cmd="chmod 777 " + pkgCodePath; process = Runtime.getRuntime().exec("su"); //切換到root帳號 os = new DataOutputStream(process.getOutputStream()); os.writeBytes(cmd + "\n"); os.writeBytes("exit\n"); os.flush(); process.waitFor(); } catch (Exception e) { return false; } finally { try { if (os != null) { os.close(); } process.destroy(); } catch (Exception e) { } } return true; } } 3.布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="${relativePackage}.${activityClass}" ><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="readwificfg"android:text="從固定路徑讀取wifi配置文件" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="readwificfg2"android:text="從API讀取wifi配置,密碼為*不可讀" /><ScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent" ><TextViewandroid:id="@+id/tv_result"android:layout_width="wrap_content"android:layout_height="wrap_content" /></ScrollView></LinearLayout>
再說明一下,上面的代碼中第一個按鈕實現(xiàn)的是從目錄讀取的,能讀到配置文件,前提是要有root權限,root權限要執(zhí)行兩次,這里懶得改了
第二個按鈕的代碼使用API,但是拿到的密碼是一個星號,API存的時候是把字符串存進去了,但是返回的時候返回*,第二個按鈕的代碼在我的2.2.2的系統(tǒng)上運行正常,4.2.2的系統(tǒng)讀取失敗
總結
以上是生活随笔為你收集整理的安卓系统下的目录权限问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 举例说明语言接触会造成哪些结果_2008
- 下一篇: CDR—错误