android應用層操作底層硬體
阿新 • • 發佈:2019-01-02
app操作底層硬體沒許可權的解決辦法:
1.若機器已經root過,可直接在應用層中操作:
String apkRoot="chmod 777 "+getPackageCodePath();
SystemManager.RootCommand(apkRoot);
exeShell("chmod 777 /dev/snd/*");
public class SystemManager { /** * 應用程式執行命令獲取 Root許可權,裝置必須已破解(獲得ROOT許可權) * @param command 命令:String apkRoot="chmod 777 "+getPackageCodePath(); RootCommand(apkRoot); * @return 應用程式是/否獲取Root許可權 */ public static boolean RootCommand(String command) { Process process = null; DataOutputStream os = null; try { process = Runtime.getRuntime().exec("su"); //process.waitFor(); os = new DataOutputStream(process.getOutputStream()); os.writeBytes(command + "\n"); os.writeBytes("exit\n"); os.flush(); os.close(); process.waitFor(); } catch (Exception e) { Log.d("*** DEBUG ***", "ROOT REE" + e.getMessage()); return false; } finally { try { if (os != null) { os.close(); } process.destroy(); } catch (Exception e) { } } Log.d("*** DEBUG ***", "Root SUC "); return true; } }
public void exeShell(String cmd){ DataOutputStream os = null; try{ Process p = Runtime.getRuntime().exec("su"); /*p.getOutputStream().write(cmd.getBytes()); p.getOutputStream().flush();*/ os = new DataOutputStream(p.getOutputStream()); os.writeBytes(cmd + "\n"); os.writeBytes("exit\n"); os.flush(); os.close(); p.waitFor(); /*BufferedReader in = new BufferedReader( new InputStreamReader( p.getInputStream())); String line = null; while ((line = in.readLine()) != null) { Log.e("exeShell",line); } */ Log.e("line", "line == null"); } catch(Throwable t) { t.printStackTrace(); } }
以上是針對已經root過的機器。
2.若機器無法root,但是可以自己編譯此機器的android原始碼:
修改android原始碼 /system/core/rootdir 資料夾下ueventd.rc
/dev/snd/* 0777 system audio
重新編譯燒錄即可。
3.每次上電後,使用命令chmod 777 /dev/snd/* 。