1. 程式人生 > >android應用層操作底層硬體

android應用層操作底層硬體

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/* 。