OTA升级,第三方如何发到消息到handler

来源:互联网 发布:谷嫂淘宝同款排除王 编辑:程序博客网 时间:2024/04/26 20:46

OTA升级之下载部分:
1,首先在收到开机广播中,context.startService(service);

2,在全局application中:public class Base extends Application {
   正在下载判断:
 public boolean IsDownloadRunning=false;
  消息队列
 public ArrayList<StatusMessage> messages = new ArrayList<StatusMessage>();

全局变量访问方法:app = (Base)getApplicationContext();

3,UpgradeService extends Service ,在onCreate中,检查有没有网络,如果没有,在一定时间内给予超时提醒,并注册,监听

ConnectivityManager.CONNECTIVITY_ACTION 广播。在超时期间,有可能有网络了,就走这个广播处理。具体是起一个异步任务,在异步任务

中,连接网络,如果网络是通的,则去初始化下载。

4,在UpgradeService  中有handler:
  public Handler handler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
   // TODO Auto-generated method stub
   
   setExitTimeOut();//有消息在接收,重新定时,在一定时间内没有消息,即超时了,结束服务。即相当于看门狗功

能。
   
   Log.d(TAG, "handleMessage called: " + msg.what + ", step: ");
   
   Intent intent = new Intent();
   intent.setAction(getPackageName() + ".status");
   intent.putExtra("message", msg);
   sendBroadcast(intent);    //发出状态广播。
   switch(msg.what) {
                       根据接收到的消息类型,填充全局变量的messages 消息队列。
handler.sendMessage(handler.obtainMessage(SystemUpgradeMessage.REBOOT_REQUIRED, 0, 0));

这里有一个问题:handler是本service中的。可以在本service中建立的线程或异步线程使用此handler。其他类中怎么使用?

方法:public interface SystemUpgradeListener {
 public void autoCallback(Message msg);
}

本service 实现这个SystemUpgradeListener 接口:
 public void autoCallback(Message msg) {
  // TODO Auto-generated method stub
  Log.d(TAG, "autoCallback called.");
  Message myMsg = handler.obtainMessage(msg.what, msg.arg1, msg.arg2);
  handler.sendMessage(myMsg);
 }

在其他类中,例如class UpgradeListener implements FileDownLoaderListener{//第三方给的文件下载监听类。
构造时,将本service作为参数给UpgradeListener 。这时,再借用本service对象调用autoCallback,即将消息送达到handler。

 public UpgradeListener(SystemUpgradeListener callback,Base app)
 {
  this.callback=callback;
  this.app=app;
 }
这样就能在第三方发到消息到handler。

 

0 0
原创粉丝点击