设为首页 收藏本站 662p开源网
开启辅助访问 切换到宽版

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

切换风格 立即注册 找回密码

安卓教程网

发表于 2018-7-13 16:37:10 | 显示全部楼层 |阅读模式
更多

 android的Service也运行在主线程,但是在服务里面是没法直接调用更改UI,如果需要服务传递消息给Activity,通过广播是其中的一种方法:

  一、在服务里面发送广播

    通过intent传送数据、通过setAction 设置Activity接收广播时要过滤的动作名   

Intent intent = new Intent(); intent.putExtra("key", "test"); intent.setAction("location.reportsucc"); sendBroadcast(intent);

  二、在Activity中创建内部类做为广播接收器,需实现BroadcastReceiver

[url=][/url]
//内部类,实现BroadcastReceiver    public class LocationReceiver extends BroadcastReceiver {        //必须要重载的方法,用来监听是否有广播发送        @Override        public void onReceive(Context context, Intent intent) {            String intentAction = intent.getAction();            if (intentAction.equals("location.reportsucc")) {                            }        }    }[url=][/url]

  三、在Activity创建时注册广播接收器,

filter.addAction值必须和服务里面注册的Action名称一致[url=][/url]
@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_home);         locationReceiver = new LocationReceiver();        IntentFilter filter = new IntentFilter();        filter.addAction("location.reportsucc");        registerReceiver(locationReceiver, filter);    }[url=][/url]

  四、最后记住在不需要广播接收器的时候,卸载广播接收器。例如在Activity销毁时卸载广播接收器


    @Override    protected void onDestroy() {        unregisterReceiver(locationReceiver);        super.onDestroy();    }

    总结:通过发送广播,是一种实现了服务和活动之间互相通信的方式。


您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Archiver|手机版|小黑屋|安卓教程网 ( 粤ICP备12089784号  

GMT+8, 2018-10-15 22:37 , Processed in 0.775328 second(s), 44 queries .

Powered by Discuz X3.1

© 2001-2013 IOS教程网

快速回复 返回顶部 返回列表