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 + "\t扫描数据:" + 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中的方法使用。