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
- Android实现crontab
- crontab转载,未实现
- crontab实现定时任务
- 使用crontab实现自动运行
- linux crontab 实现每秒执行
- crontab实现定时执行脚本
- python-crontab实现定时任务
- crontab实现自动删除日志
- linux crontab 实现每秒钟执行
- crontab实现每秒去检查
- crontab
- crontab
- crontab
- crontab
- crontab
- crontab
- crontab
- crontab
- JS严格模式下常见问题汇总
- 15.3 动态类型安全
- 重读java编程思想之复用类之final
- 自定义Dialog
- 简述NotificationCenter、KVC、KVO、Delegate?并说明它们之间的区别?
- Android实现crontab
- Jquery “回到顶部”
- Sort Colors
- HDU-3189-Just Do It【分解质因数】
- Java编程思想第四版第七章学习(1)——基类初始化
- android 中BroadcastReceiver 深入理解
- Resources和 AssetBundle 的区别
- Ubuntu无法更新的问题
- JS与iOS交互之OC获取JS内容跳转到指定控制器实现技巧