• [android] 代码注册广播接收者&利用广播调用服务的方法


    利用广播调用服务里面的方法,间接的方式调用服务内部的方法,与现实中差不多,请媒体曝光

    主界面里面

    在界面创建的时候开启一下服务普通的startService()方法

    发送一条广播出去

    获取Intent对象,通过new出来

    调用Intent对象的setAction()方法,参数:一般就是包名

    调用sendBroadcast(intebt)方法,发送广播,参数:Intent对象

    服务里面

    新建一个MyService类继承系统的Service

    添加一个自定义的服务的方法callServiceMethod(),我们目的要调用的方法

    新建一个内部类MyReceiver继承系统的Receiver

    广播接收者既能通过清单文件注册,也可以通过代码的方式注册,这是四大组件中唯一的特殊的一个

    MyService中创建一个MyReceiver的成员变量

    在服务创建的时候,注册广播接收者,在onCreate()方法里面

    调用registerReceiver(receiver,filter)方法,注册这个广播接收者,参数:receiverBroadcastReceiver对象,通过new MyReceiver()来创建,filterIntentFilter对象

    获取IntentFilter对象,通过new出来

    调用IntentFilter对象的addAction(action)方法,意图过滤器对象添加监听动作,上面发送的那个动作

    当接收者收到信号的时候,会调用MyReceiver对象的onReceive()方法,在这个方法里面可以去调用服务的私有方法,比如callServiceMethod()

    当服务销毁的时候,解除注册的广播接收者,在onDestroy()方法里面,调用unResisterReceiver(receiver),参数:广播接收者对象

    MainActivity.java

    package com.tsh.broadcallservice;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //开启服务
            Intent intent=new Intent(this,MyService.class);
            startService(intent);
        }
        //广播调用服务
        public void call(View v){
            Intent intent=new Intent();
            intent.setAction("com.tsh.broadcallservice");
            sendBroadcast(intent);
        }
    }

    MyService.java

    package com.tsh.broadcallservice;
    
    import android.app.Service;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.os.IBinder;
    import android.widget.Toast;
    
    public class MyService extends Service {
        private MyReceiver receiver;
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
        //服务创建的时候注册广播接收者
        @Override
        public void onCreate() {
            super.onCreate();
            receiver=new MyReceiver();
            IntentFilter filter=new IntentFilter();
            filter.addAction("com.tsh.broadcallservice");
            registerReceiver(receiver, filter);
        }
        //服务里面的一个方法
        public void callServiceMethod(){
            Toast.makeText(getApplicationContext(), "广播调用服务啦", 0).show();
        }
        
        //内部类实现广播接收者
        private class MyReceiver extends BroadcastReceiver{
    
            @Override
            public void onReceive(Context context, Intent intent) {
                callServiceMethod();
            }
        } 
    }
  • 相关阅读:
    面向对象---工厂模式
    [转]Caffe 安装配置(CentOS + 无GPU)
    [转]Centos6.5+CUDA6.5+caffe安装配置及可能遇到问题解答
    [转]Caffe安装过程记录(CentOS,无独立显卡,无GPU)
    [转]LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别
    [转]centos 6.5安装caffe
    [转]CentOS编译安装GIMP
    [转]Snappy压缩库安装和使用之一
    [转]拍照怎么搜题?(下)
    [转]拍照怎么搜题?(上)
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5343049.html
Copyright © 2020-2023  润新知