2013-10-28 25 views
0

我想編寫一個簡單的android應用程序,用於監聽諸如長按菜單按鈕或按Home按鈕3次的命令,然後更改/ sys/class/mdnie/mdnie/negative爲1或0.我不知道從哪裏開始,我知道修改此值需要root訪問權限,我可以通過echo> 1/sys/class/mdnie/mdnie/negative成功完成此操作。如何監聽活動並更改設置

任何指導被讚賞,我需要這個視力障礙的朋友。此應用程序會爲某些三星設備上的負面顏色切換,並且他想按下主頁鍵3次以在設備上的任何位置打開和關閉負面顏色。

+0

http://stackoverflow.com/questions/18086097的可能的複製/ where-to-put-code-for-a-global-hardware-key-listener – Piovezan

+0

感謝您的參考,我們使用的ROM允許通過硬鍵啓動應用程序,所以除了硬鍵功能,我怎麼會寫一個簡單的應用程序查看/ sys/class/mdnie/mdnie/negative中的值,並根據其已有值將其更改爲1或0。這個應用程序不需要用戶界面。 – user2929128

回答

0

應該不難。這將是一個沒有關聯顯示的活動,可以切換值並在之後立即結束。該代碼是這樣的(它是不是未經測試的代碼 - 如果你面對的問題,他們發佈從這個不同的新的StackOverflow問題):

public class ToggleNegativeColorsActivity extends Activity { 

    private static final String FILEPATH = "/sys/class/mdnie/mdnie/negative"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super(savedInstanceState); 

     try { 
      String value = readFileAsString(FILEPATH); 
      if ("1".equals(value.trim())) { 
       writeStringToFile(FILEPATH, "0"); 
      } else { 
       writeStringToFile(FILEPATH, "1"); 
      } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 

     finish(); 
    } 

    // Grabbed from http://stackoverflow.com/questions/1656797/how-to-read-a-file-into-string-in-java 
    private String readFileAsString(String filePath) throws IOException { 
     StringBuffer fileData = new StringBuffer(); 
     BufferedReader reader = new BufferedReader(
      new FileReader(filePath)); 
     char[] buf = new char[1024]; 
     int numRead; 
     while((numRead=reader.read(buf)) != -1){ 
      String readData = String.valueOf(buf, 0, numRead); 
      fileData.append(readData); 
     } 
     reader.close(); 
     return fileData.toString(); 
    } 

    // Grabbed from http://stackoverflow.com/questions/1053467/how-do-i-save-a-string-to-a-text-file-using-java 
    private void writeStringToFile(String filePath, String value) throws IOException { 
     PrintWriter out = new PrintWriter(filePath); 
     out.print(value); 
     out.close(); 
    } 
}