Android实现crontab

来源:互联网 发布:php接收post json 编辑:程序博客网 时间:2024/06/01 08:33
crontab在Android中并不支持,即使是撞了busybox之后
需要借用AlarmManager,在指定的时间唤醒某个task
需求是:
1. 随机启动某个service
2. service启动后检测某个系统指标,或者周期性运行某个任务

1. 随机启动service
public class AutoStartBroadCastReceiver extends BroadcastReceiver {
    private String TAG = AutoSignService.class.getName();

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        // TODO Auto-generated method stub
        Log.e(TAG, "AutoStartBroadCastReceiver onCreate");
        Intent intent = new Intent(arg0, AutoSignService.class);
        arg0.startService(intent);
    }
}

AndroidManifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

2. service启动,借用PendingIntent.getBroadcast发送广播,广播接收者做实际的检测某个系统指标,或者周期性运行某个任务

public class AutoSignService extends Service {

    private String TAG = AutoSignService.class.getName();
    AlarmManager mAlarmManager;
    Intent workIntent;
    PendingIntent mPendingIntent;

    SignTimzBroadcastReceiver mSignTimzBroadcastReceiver;

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate()
    {
        Log.e(TAG, "onCreate");
        mAlarmManager = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
        workIntent = new Intent();

        mSignTimzBroadcastReceiver = new SignTimzBroadcastReceiver();
        IntentFilter signTimzIntentFilter = new IntentFilter();
        signTimzIntentFilter.addAction("com.run.sign.timz");
        registerReceiver(mSignTimzBroadcastReceiver, signTimzIntentFilter);


    }

    @Override
    public int onStartCommand(android.content.Intent intent, int flags, int startId)
    {

        Log.e(TAG, "onStartCommand");
        workIntent.setAction("com.run.sign.timz");

        mPendingIntent = PendingIntent.getBroadcast(AutoSignService.this, 0, workIntent, 0);

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.add(Calendar.SECOND, 10);

        mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
                calendar.getTimeInMillis(), 
                1000, 
                mPendingIntent);

        return 0;
    }

    @Override
    public void onDestroy()
    {
        Log.e(TAG, "onDestroy");
        this.unregisterReceiver(mSignTimzBroadcastReceiver);
    }


    class SignTimzBroadcastReceiver extends BroadcastReceiver
    {

        @Override
        public void onReceive(Context arg0, Intent arg1) {
            // TODO Auto-generated method stub
            Log.e(TAG, "SignTimzBroadcastReceiver Runtime");

            suShell("uiautomator runtest UIAutomatorTest.jar");
        }

        //需要root权限执行命令时使用该方法
        public void suShell(String cmd) {
            Process ps = null;
            DataOutputStream os;

            try {
//                ps = Runtime.getRuntime().exec("su");
//                os = new DataOutputStream(ps.getOutputStream());
//                
//                os.writeBytes(cmd + "\n");
//                os.writeBytes("exit\n");
//                os.flush();
                Runtime.getRuntime().exec(cmd);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }





}

0 0
原创粉丝点击