有个小计划练手,就是做一个拍照,之后自动上传到某个服务器上的小demo
思路是这样的,
拍照的时候加一个标志位表示这个照片要同步到网络上且还未上传。
之后系统定期检查是否有上传任务,若有,则执行上传,若没有,则等待至下一次检测点
ok,转化为程序思路,具体如下,
为实现自启动,需要捕获我们的设备运行信息,可以使用BroadcastReceiver这个东西
但是我们启动的是alarmManager
为什么不直接用上传的Service,之后在Service 内部实现一个循环等待的功能?
因为android机制当中,里面的wait 是指你在active 的时候的时间,如果程序本身是inactive或者被pause了的话,等待的时间就会不准。同时,如果一直监听,则service是不会被回收的,这点很不爽。
下面就是这个demo的第一步,捕获系统开机,自动运行程序
android认为这个事情比较重要,所以要在mainfest 中授权,
授权方式如下
在manifest 根节点下直接添加权限节点
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
在有了权限之后,我们还要写一个receiver指定谁接受这个东西
照例,我们需要像activity一样的在mainfest 里指定他
同时这里因为要捕获系统的启动,所以说需要在intent-filter设置一下 详情如下所示
之后OnBootReceiver 的代码也很简单,
package info.atpking.cityHelper;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class OnBootReceiver extends BroadcastReceiver {
private static final String LOGTAG = "ATPKINGLOG";
@Override
public void onReceive(Context context, Intent intent) {
Log.v(LOGTAG,"我已随系统启动了哇亲");
// 在这里接下来我们要开启AlarmManager 了
}
}
之后就可以在虚拟机上跑了。
注意,虚拟机需要首先加载一次这个程序之后才能随系统开机运行
直接点运行,出来新建项目时默认的activity后,这个时候系统已经将其receiver 注册了
关掉虚拟机,之后再启动虚拟机,我们就可以在LogCat 上看到我们的开机运行了。
下一篇,介绍AlarmManager 的用法