package com.anyun.exam.lib;
|
|
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;
|
|
/**
|
* MyApplication2
|
* Created by lzw on 2019/6/5. 13:15:20
|
* 邮箱:632393724@qq.com
|
* All Rights Saved! Chongqing AnYun Tech co. LTD
|
*/
|
public class AYSdk implements IAYExamInterface{
|
|
private static final String TAG = "AYSDK";
|
|
private IAYExamListener mCallback;
|
//远程服务接口
|
private IRemoteInterface remoteInterface;
|
//安运驾考系统 sdk 单例模式
|
private volatile static AYSdk ourInstance = null;
|
private Context mContext;
|
private MyServiceConn conn;
|
|
public static AYSdk getInstance() {
|
if (ourInstance == null){
|
synchronized (AYSdk.class){
|
if (ourInstance == null){
|
ourInstance = new AYSdk();
|
}
|
}
|
}
|
return ourInstance;
|
}
|
|
/**
|
* 初始化SDK
|
* @param context
|
*/
|
public void init(Context context){
|
this.mContext = context;
|
//bind service
|
Intent intent = new Intent(mContext,RemoteService.class);
|
conn = new MyServiceConn();
|
mContext.bindService(intent,conn,Context.BIND_AUTO_CREATE);
|
}
|
|
|
|
/**
|
* 解绑
|
*/
|
public void uninit(){
|
if (mContext != null){
|
if (remoteInterface!=null && remoteInterface.asBinder().isBinderAlive()){
|
try {
|
remoteInterface.unRegistListener(RemoteCallback);
|
|
} catch (RemoteException e) {
|
e.printStackTrace();
|
}
|
}
|
mContext.unbindService(conn);
|
}else{
|
Log.e(TAG,"mContext == null,please init SDK firstly");
|
throw new RuntimeException("mContext == null,please init SDK firstly");
|
}
|
}
|
|
private AYSdk() {
|
|
}
|
|
/**
|
* 远程服务回调通知客户端消息
|
*/
|
IListenerInterface RemoteCallback = new IListenerInterface.Stub(){
|
@Override
|
public void onMessageArrived(String json) throws RemoteException {
|
|
if (mCallback != null){
|
mCallback.callBackMsg(json);
|
}
|
}
|
|
|
};
|
|
@Override
|
public void checkSignal(int type) {
|
|
}
|
|
@Override
|
public void add() {
|
if (!checkRemoteIsNull()){
|
try {
|
remoteInterface.add();
|
} catch (RemoteException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
@Override
|
public void registListener(IAYExamListener iayExamListener) {
|
this.mCallback = iayExamListener;
|
}
|
|
/**
|
* 检查远程服务是否可以使用
|
* @return 可以用false,不可以用true
|
*/
|
private boolean checkRemoteIsNull() {
|
return remoteInterface==null?true:false;
|
}
|
|
class MyServiceConn implements ServiceConnection {
|
@Override
|
public void onServiceConnected(ComponentName name, IBinder service) {
|
remoteInterface = IRemoteInterface.Stub.asInterface(service);
|
try {
|
//设置死亡代理
|
service.linkToDeath(mDeathRecipient,0);
|
|
remoteInterface.registListener(RemoteCallback);
|
} catch (RemoteException e) {
|
e.printStackTrace();
|
}
|
}
|
|
@Override
|
public void onServiceDisconnected(ComponentName name) {
|
|
}
|
|
|
}
|
|
/**
|
* Binder断裂回调
|
* 如果服务端进程由于某种异常原因停止
|
*/
|
private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
|
@Override
|
public void binderDied() {
|
Log.e(TAG,"IBinder.DeathRecipient binderDied");
|
if (remoteInterface != null){
|
Log.e(TAG,"IBinder.DeathRecipient binderDied remoteInterface != null ,return");
|
return;
|
}
|
remoteInterface.asBinder().unlinkToDeath(mDeathRecipient,0);
|
remoteInterface = null;
|
}
|
};
|
|
}
|