zoukankan      html  css  js  c++  java
  • 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中的方法使用。

     
  • 相关阅读:
    LeetCode 264. Ugly Number II
    LeetCode 231. Power of Two
    LeetCode 263. Ugly Number
    LeetCode 136. Single Number
    LeetCode 69. Sqrt(x)
    LeetCode 66. Plus One
    LeetCode 70. Climbing Stairs
    LeetCode 628. Maximum Product of Three Numbers
    Leetcode 13. Roman to Integer
    大二暑假周进度报告03
  • 原文地址:https://www.cnblogs.com/zoro-zero/p/12403874.html
Copyright © 2011-2022 走看看