【问题标题】:Update ProgressBar from a Service started by a BroadcastReceiver从由 BroadcastReceiver 启动的 Service 更新 ProgressBar
【发布时间】:2013-02-24 22:42:14
【问题描述】:

这是场景:我有一个广播接收器,它监听 ACTION_PHONE_STATE_CHANGED,当它发生变化时,它启动一个服务。该服务对 CallLog 进行查询,当某些事情增加时,我想在 MainActivity 上的多个 ProgressBar 上显示它,但我该怎么做呢?

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

提前致谢

【问题讨论】:

    标签: android service progress-bar broadcastreceiver


    【解决方案1】:

    有一些可能性:

    1. 您的服务可以发送广播(sendBroadcast),您的活动只需要根据您在服务上实现的注册一个广播接收器。类似的东西:

    您的服务:

     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的链接很有用。

    【讨论】:

    • 好的,这很好,但是如果我想从服务实现中检索一个值呢?就像 uhm 一样,服务做了一些事情并获得了一个值,我想将它传递给 MainActivity 以用它更新 ProgressBar。
    • 在方法一上,您应该以与将数据传递给另一个活动时相同的方式放入意图中。在方法二上,方法 notifyProgressBar 可以有一个参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多