从BroadcastReceiver启动的服务更新ProgressBar

时间:2013-02-24 22:42:15

标签: android service progress-bar broadcastreceiver

这就是场景:我有一个侦听ACTION_PHONE_STATE_CHANGED的BroadcastReceiver,当它发生变化时,它会启动一个服务。这个服务使CallLog成为一个查询,当有什么东西增加时我想在MainActivity上的几个ProgressBar上显示它,但是我怎么能这样做呢?

我正在考虑创建一个Application类,它是MainActivity和Service的子类,然后我可以有相应的引用,或者我错了吗?

提前致谢

1 个答案:

答案 0 :(得分:2)

有一些可能性:

  1. 您的服务可以发送一个brodcast(sendBroadcast),您的活动只需要根据您在服务上实施的注册broacastReceiver。类似的东西:
  2. 您的服务:

     Intent intent=new Intent(getApplicationContext(),WebResults.class);
     intent.setAction("com.toxy.LOAD_URL");
     intent.putExtra("url",uri.toString());
     sendBroadcast(intent);
    

    您的活动:

     private class Receiver extends BroadcastReceiver {
    
     @Override
     public void onReceive(Context arg0, Intent arg1) {
    
         String url = arg1.getExtras().getString("url");
         WebView webview =(WebView)findViewById(R.id.webView);
         webview.loadUrl(url);
     }
    

    此链接可以告诉您:http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html

    第二种方法是在您的服务上注册一个监听器,并在您的服务上通知该监听器。

    在您的服务中:

    void onSomethingHappened()
    {
         activityListener.notifyProgressBar();
    }
    
    void subscribe(YourInterface listener)
    {
         actibityListener =  listener;
    }
    

    在您的活动中,开始服务后:

    service.subscribe(this); 
    

    但是,要采用更好的解决方案,您应该考虑您的服务实施(类型)。

    这个关于AndroidService的链接很有用。