如何使用android程序在system/etc/wifi/wpa_supplicant.conf文件中写入文件?
问题描述:
我正在使用wifi相关的应用程序,它需要用户提供用户名密码,并且需要在位于系统/ etc/wifi /路径中的文件中写入(编辑/附加)。如何使用android程序在system/etc/wifi/wpa_supplicant.conf文件中写入文件?
我在stackoverflow搜索并得到了一些答案,然后尝试,但没有运气。这是根植设备。我也重新安装了,也是。我可以读取同一个文件。我也将所有权限都放在清单中。我错过了什么?
try {
String[] command = new String[]{"/system/bin/ls", "-l",
"/system/etc/wifi/wpa_supplicant.conf" };
Process process = Runtime.getRuntime().exec(command);
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
int read;
String output = "";
String line;
while ((line = reader.readLine()) != null) {
output.concat(line + "\n");
Log.w("myApp", "[[output]]:" + line);
}
reader.close();
process.waitFor();
String[] command2 = new String[]{"/system/etc/wifi/chmod", "777",
"/system/etc/wifi/wpa_supplicant.conf" };
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(new String[]{"/system/bin/sh", "-c", "echo \"12345678\" > /system/etc/wifi/wpa_supplicant.conf"});
File path= Environment.getDataDirectory();
FileWriter fw = new FileWriter(new File("/system/etc/wifi/wpa_supplicant"));
fw.write('9');
fw.close();
Log.d(TAG, "File Saved Successfully !!!");
//display file saved message
/*Toast.makeText(getBaseContext(), "File saved successfully!",
Toast.LENGTH_SHORT).show();*/
} catch (Exception e) {
e.printStackTrace();
}
这是我的清单权限(外部应用程序标记和一些更多的权限还有一些其他目的)。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
及以下的错误我得到,
01-01 06:13:53.565: W/myApp(11205): [[output]]:-rw-rw-rw- root root 58 2000-01-01 03:56 wpa_supplicant.conf
01-01 06:13:53.580: W/System.err(11205): java.io.FileNotFoundException: /system/etc/wifi/wpa_supplicant: open failed: EROFS (Read-only file system)
01-01 06:13:53.580: W/System.err(11205): at libcore.io.IoBridge.open(IoBridge.java:452)
01-01 06:13:53.580: W/System.err(11205): at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
01-01 06:13:53.580: W/System.err(11205): at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
01-01 06:13:53.581: W/System.err(11205): at java.io.FileWriter.<init>(FileWriter.java:42)
01-01 06:13:53.581: W/System.err(11205): at com.intel.sunnypoint.headless.HeadlessService.WriteBtn(HeadlessService.java:450)
01-01 06:13:53.581: W/System.err(11205): at com.intel.sunnypoint.headless.HeadlessService.setupWifiAPConfig(HeadlessService.java:386)
01-01 06:13:53.581: W/System.err(11205): at com.intel.sunnypoint.headless.HeadlessService$HttpServiceThread$WiFiPageHandler.handle(HeadlessService.java:1094)
01-01 06:13:53.581: W/System.err(11205): at org.apache.http.protocol.HttpService.doService(HttpService.java:248)
01-01 06:13:53.581: W/System.err(11205): at org.apache.http.protocol.HttpService.handleRequest(HttpService.java:192)
01-01 06:13:53.581: W/System.err(11205): at com.intel.sunnypoint.headless.HeadlessService$HttpServiceThread.run(HeadlessService.java:663)
01-01 06:13:53.581: W/System.err(11205): Caused by: android.system.ErrnoException: open failed: EROFS (Read-only file system)
01-01 06:13:53.581: W/System.err(11205): at libcore.io.Posix.open(Native Method)
01-01 06:13:53.581: W/System.err(11205): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
01-01 06:13:53.582: W/System.err(11205): at libcore.io.IoBridge.open(IoBridge.java:438)
01-01 06:13:53.582: W/System.err(11205): ... 9 more
答
您是否有root权限?没有root访问权限,只有闪存更新(通过恢复或OTA)的机制才能修改/system
。要被接受,这种更新档案必须使用与ROM相同的密钥进行签名 - 这是只有ROM的开发者才能做到的。
可能有一种方法可以通过自定义恢复功能直接编辑所有文件系统(twrp)。但是不知道它是什么设备,如果存在匹配的恢复则不能说。除此之外,它要么根植于设备,要么不在/system
内编辑任何文件。
如果你有root权限,你应该以root身份执行命令! su
命令应使用
Runtime.getRuntime().exec("su");
或在每个命令中一个完整路径su.bin
。
感谢您的快速响应,但我需要一个解决方案,以便如何在该特定位置修改文件? – kodali
感谢宝贵的信息,你能指导我如何获得动态权限吗?如果你在这个问题上帮助我,你会拯救我的生命。 – kodali