• Android 广播介绍与service一起使用案例


    1、案例

    定义广播注册广播发送广播最后注销广播

    1.1、定义广播

        private BroadcastReceiver scanReceiver = new BroadcastReceiver(){
            @Override
            public void onReceive(Context context, Intent intent) {if (intent.getAction().equals(BARCODE_ACTION)) {
                    String data = intent.getStringExtra(BARCODE_ACTION_DATA);
                    Log.e("MainActivity", "---------------------data-------------"+data);
                    if(data!=null){
                        setText(data);
                        manager.stopBarcodeScan();
                    }
                }
            }
        };

    1.2、注册广播

        //注册广播接收器
            IntentFilter intentFilter=new IntentFilter();              
    intentFilter.addAction("com.example.rfid_sdk_as.receiver.action"); registerReceiver(scanReceiver,intentFilter);

    1.3、发送广播

     Intent intent = new Intent(BARCODE_ACTION);
     sendBroadcast(intent);

    1.4、注销广播

     if(scanReceiver!=null){
          unregisterReceiver(scanReceiver);
      }

    2、广播与service一起使用

    2.1、定义广播

    package com.example.rfid_sdk_as;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.RemoteException;
    import android.util.Log;
    
    import com.hyc.api.DeviceManagement;
    
    public class BarCodeReceiver extends BroadcastReceiver {
    
        public static final String RECEIVER_ACTION = "com.android.server.scannerservice.broadcastbl";
    
        private DeviceManagement deviceManagement;
    
        private  BarCodeReceiver receiver;
    
        public void setDeviceManagement(DeviceManagement deviceManagement){
            this.deviceManagement =  deviceManagement;
        }
    
        public void setReceiver(BarCodeReceiver receiver){
            this.receiver = receiver;
    
        }
        @Override
        public void onReceive(final Context context, final Intent intent) {
            Log.e("MainActivity", "---------------------接收到广播-------------");
            String action = intent.getAction();
            if (RECEIVER_ACTION.equals(action)) {
                String data = intent.getStringExtra("scannerdata");
                Log.e("MainActivity", "-------------------data=" + data);
                if(deviceManagement!=null){
                    BarCodeData.Stub barCodeData = new BarCodeData.Stub() {
                        @Override
                        public void GetBarCodeData(String msg, String data) throws RemoteException {
                            Log.e("MainActivity", "扫描状态:" + msg + "	扫描数据:" + data);
                            intent.putExtra("scannerdata",data);
                            context.sendBroadcast(intent);
                        }
                    };
                    deviceManagement.startBarcodeScan(barCodeData);
                }
            }
        }
    }

    2.2、创建service

    package com.example.rfid_sdk_as;
    
    import android.app.Service;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.os.Message;
    import android.os.RemoteException;
    import android.support.annotation.Nullable;
    import android.util.Log;
    
    import com.hyc.api.DeviceManagement;
    import com.hyc.bean.RFIDData;
    import com.hyc.bean.TagData;
    
    import java.util.List;
    
    
    public class APPService  extends Service {
    
        private static final String TAG = "ServerService";
        private DeviceManagement deviceManagement = null;
        BarCodeReceiver receiver = null;
    
        public static final String RECEIVER_ACTION = "com.example.rfid_sdk_as.receiver.action";
    
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return null;
          
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
            deviceManagement = new DeviceManagement(this);
    
            receiver = new BarCodeReceiver();
            receiver.setDeviceManagement(deviceManagement);
            receiver.setReceiver(receiver);
            registerReceiver(receiver,new IntentFilter(BarCodeReceiver.RECEIVER_ACTION));
    
            Log.i(TAG,"--------------start service");
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            deviceManagement.exit();
            if(receiver!=null){
                unregisterReceiver(receiver);
            }
            Log.i(TAG,"--------------stop service");
        }
    
    
    }

    2.3、serviceManager 

    package com.example.rfidlibrary;
    
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.content.ServiceConnection;
    import android.os.IBinder;
    import android.os.RemoteException;
    import android.util.Log;
    
    import com.example.rfid_sdk_as.AIDLRFIDData;
    import com.example.rfid_sdk_as.AIDLTagData;
    import com.example.rfid_sdk_as.BarCodeData;
    import com.example.rfid_sdk_as.IAPPServiceRemoteBinder;
    import com.example.rfid_sdk_as.InitDeviceCallback;
    
    import java.util.List;
    
    public class RFIDReaderManager {
    
        private static final String TAG = "RFIDReaderManager";
    
        private static final String PACKAGE = "com.example.rfid_sdk_as";
        private static final String BIND_ACTION = "com.example.rfid_sdk_as.APPService";
        private IAPPServiceRemoteBinder binderService;
        private static Context mContext;
        private static RFIDReaderManager mManager;
        private RFIDReaderServiceConnectListen mListener;
    
        public static RFIDReaderManager instance(Context context) {
            Log.i(TAG, "------------------instance-----------------");
            mContext = context;
            if (mManager != null) {
                return mManager;
            } else {
                mManager = new RFIDReaderManager();
            }
            return mManager;
        }
    
        public void serviceConnectListen(RFIDReaderServiceConnectListen listener) {
            Log.i(TAG, "---------------------ServiceConnect");
            mListener = listener;
            Intent it = new Intent();
            it.setAction(BIND_ACTION);
            it.setPackage(PACKAGE);
    //        it.setComponent(new ComponentName(PACKAGE, BIND_ACTION));
            mContext.bindService(it, mserviceConnection, mContext.BIND_AUTO_CREATE);
        }
    
        public void unbind(){
            Log.i(TAG, "---------------------unbind");
            if(mserviceConnection!=null){
                mContext.unbindService(mserviceConnection);
            }
            binderService = null;
            mListener.disConnect();
        }
    
    
        ServiceConnection mserviceConnection = new ServiceConnection() {
            @Override
            public void onServiceDisconnected(ComponentName name) {
                unbind();
            }
    
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                Log.i(TAG, "---------------------onServiceConnected");
                binderService = IAPPServiceRemoteBinder.Stub.asInterface(service);
                mListener.connected();
            }
        };
    
        public interface RFIDReaderServiceConnectListen{
            public void connected();
            public void disConnect();
        }
    }

    2.4、service调用

    RFIDReaderManager manager = RFIDReaderManager.instance(this);
            manager.serviceConnectListen(new RFIDReaderManager.RFIDReaderServiceConnectListen() {
                @Override
                public void disConnect() {
                    // TODO Auto-generated method stub
                }
                @Override
                public void connected() {
                    // TODO Auto-generated method stu
                }
            });

    上面是监听到service,然后 调用service中的方法使用。

     
  • 相关阅读:
    我经历的IT公司面试及离职感受(转)
    一个优异的经理人,碰到糟糕的企业,最后往往存在的还是那间糟糕的企业(转)
    Android TextView和EditText属性详解
    Android EditText控件行尾为表情时的BUG
    Android安全问题 抢先拦截短信
    Android安全问题 抢先开机启动
    Android安全问题 抢先接收广播
    Android安全问题 抢先接收广播
    Android 监听EditView中的文本改变事件
    Android EditText中插入图片并响应点击事件
  • 原文地址:https://www.cnblogs.com/zoro-zero/p/12403874.html
Copyright © 2020-2023  润新知