やりたいこと
端末の温度やIPアドレスなど、Androidフレームワークから取得するより、Linuxカーネル上から取得したほうが、簡単な場合がある。
AndroidからLinuxコマンドを実行するやり方を、備忘録として残しておく
Step1.Linuxコマンドの実行メソッド
Linuxコマンドを実行するメソッドを用意する
public void commandExecution(String command) {
Process process = null;
BufferedWriter writer = null;
BufferedReader reader = null;
StringBuilder result = new StringBuilder();
try {
String processInfo;
writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
// コマンド実行
String cmd = command + "\n";
process = Runtime.getRuntime().exec(cmd);
writer.write("exit \n");
writer.flush();
process.waitFor();
// コマンド結果
while ((processInfo = reader.readLine()) != null) {
result.append(processInfo).append("\n");
}
} catch (Exception e) {
} finally {
try {
if (null != writer) {
writer.close();
}
if (null != reader) {
reader.close();
}
if (null != process) {
process.destroy();
}
} catch (Exception e) {
}
}
}
Step2.実行したいLinuxコマンドを設定
コマンドを設定しメソッドに渡すだけ
// 例)端末の温度
String command = "cat /sys/class/thermal/thermal_zone0/temp";
temp = commandExecution(command);
Log.d(TAG, "端末の温度:" + temp);
よく使いそうなコマンドメモ
※"|"は、全角で記載しているため、コピペする場合は半角に直してください
取得情報 | コマンド | 結果例 | 備考 |
---|---|---|---|
端末の温度 | cat /sys/class/thermal/thermal_zone0/temp | 42000 | 左記例では摂氏42度 |
端末のIPアドレス(Wi-Fi) | ip addr show wlan0 | awk '/inet / {print $2}' | 192.168.1.100/24 | |
端末のGetwayアドレス(Wi-Fi) | ip route get 8.8.8.8 | awk '/via/ {print $3}' | 192.168.1.1 | |
端末のMacアドレス(Wi-Fi) | ip addr show wlan0 | awk '/ether/ {print $2}' | aa:bb:cc:dd:ee:ff |
最後に
コマンドベースでできることが増えると、実装の幅も広がるきがした