[問題] 開機後執行腳本問題
目前來說我用一個broadcastreceiver來接收boot complete的broadcast
程式碼如下
package com.example.testactivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
import android.content.SharedPreferences;
public class boot_complete_receiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
SharedPreferences setting =arg0.getSharedPreferences("AUTO_TEST" ,0);
Boolean boot_test =setting.getBoolean("BOOT_TEST",true);
if(boot_test){
Toast toast = new Toast(arg0);
toast.makeText(
arg0,"boot complete",Toast.LENGTH_LONG).show();
Intent myIntent = new Intent(arg0, startscript.class);
arg0.startService(myIntent);
}
}
}
他會呼叫一個service來執行存在特定地點的腳本
程式碼如下
package com.example.testactivity;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
public class startscript extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.e("startscript", "service start");
boolean command = false;
// 建立FileReader物件,並設定讀取的檔案為SD卡中的output.txt檔案
Process process = null;
try {
process = Runtime.getRuntime().exec("sh");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DataOutputStream out = new DataOutputStream(process.getOutputStream());
// try {
// out.writeBytes(" input key event 22 \n");
// out.writeBytes(" input key event 22 \n");
// out.writeBytes("sleep 0.247");
// out.writeBytes(" input key event 22 \n");
// out.writeBytes("sleep 1.112");
// out.writeBytes(" input key event 22 \n");
// out.writeBytes("sleep 0.244");
// out.writeBytes(" input key event 21 \n");
// out.writeBytes("sleep 0.342");
// out.writeBytes(" input key event 21 \n");
// out.writeBytes("sleep 0.246");
// out.writeBytes(" input key event 23 \n");
// out.writeBytes("sleep 0.668");
// out.writeBytes(" input key event 23 \n");
// out.writeBytes("sleep 0.416");
// } catch (IOException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
// try {
// out.flush();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
FileReader fr = null;
try {
fr = new FileReader("/system/app/output.txt");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 將BufferedReader與FileReader做連結
BufferedReader br = new BufferedReader(fr);
String readData = "";
String temp = null;
try {
temp = br.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // readLine()讀取一整行
String shell_command;
String[] test;
while (temp != null) {
if (temp.contains("End Sub")) {
command = false;
try {
out.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (command) {
if (temp.indexOf("\"") != -1) {
shell_command = temp.substring(temp.indexOf("\"") + 1,
temp.lastIndexOf("\""));
Log.e("start script", shell_command);
try {
out.writeBytes(shell_command + "\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
test = temp.split(" ");
Log.e("start script", test[1]);
try {
out.writeBytes("sleep "
+ String.valueOf(Float.parseFloat(test[1]) / 1000)
+ "\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
if (temp.contains("Sub Main")) {
command = true;
}
try {
temp = br.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Log.e("startscript", "service stop");
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
可是目前發現開機後執行的腳本會跟原本所錄製的腳本有差異
應該有少一兩個input keyevent
可是從log看起來所有的指令都有進到DataOutputStream
不知道是否有人有遇過這種情況
本來是猜可能跟腳本放在sd card有關
不過後來是試過覺得不是
如果用直接呼叫service的方式來執行腳本的話沒有問題
可是如果用boot complete後startservice的方式就有問題
請問有哪位大大可以給我一點提示
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.137.25.223