From db2651457acfd5bfb6e3031db3e6b89eafa57a47 Mon Sep 17 00:00:00 2001
From: endian11 <Dana_Lee1016@126.com>
Date: 星期三, 05 六月 2019 16:58:41 +0800
Subject: [PATCH] 调用远程服务接口成功; 以后远程服务需要增加功能(客户端app调用),直接在IAYExamInterface里添加,然后在RemoteService实现功能;在AYSDK中调用remoteservice实现的功能;增加SDK回调给客户端app的callback,IAYEXAMListener;增减binder断裂监听
---
lib/src/main/java/com/anyun/exam/lib/AYSdk.java | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 103 insertions(+), 2 deletions(-)
diff --git a/lib/src/main/java/com/anyun/exam/lib/AYSdk.java b/lib/src/main/java/com/anyun/exam/lib/AYSdk.java
index 389ffda..659a8b5 100644
--- a/lib/src/main/java/com/anyun/exam/lib/AYSdk.java
+++ b/lib/src/main/java/com/anyun/exam/lib/AYSdk.java
@@ -1,7 +1,11 @@
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;
/**
@@ -10,16 +14,19 @@
* 閭锛�632393724@qq.com
* All Rights Saved! Chongqing AnYun Tech co. LTD
*/
-class AYSdk {
+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;
- static AYSdk getInstance() {
+ public static AYSdk getInstance() {
if (ourInstance == null){
synchronized (AYSdk.class){
if (ourInstance == null){
@@ -42,11 +49,21 @@
mContext.bindService(intent,conn,Context.BIND_AUTO_CREATE);
}
+
+
/**
* 瑙g粦
*/
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锛宲lease init SDK firstly");
@@ -57,4 +74,88 @@
private AYSdk() {
}
+
+ /**
+ * 杩滅▼鏈嶅姟鍥炶皟閫氱煡瀹㈡埛绔秷鎭�
+ */
+ IListenerInterface RemoteCallback = new IListenerInterface.Stub(){
+ @Override
+ public void onMessageArrived(String json) throws RemoteException {
+ Log.d("MyServiceConn",json);
+ 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 鍙互鐢╢alse锛屼笉鍙互鐢╰rue
+ */
+ 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 {
+ //璁剧疆姝讳骸浠g悊
+ 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;
+ }
+ };
+
}
--
Gitblit v1.8.0