|
|
@@ -0,0 +1,246 @@
|
|
|
+package com.example.smartbowlib.lebo;
|
|
|
+
|
|
|
+import android.content.Context;
|
|
|
+import android.provider.Settings;
|
|
|
+import android.text.TextUtils;
|
|
|
+
|
|
|
+import com.example.smartbowlib.UnityMsgSender;
|
|
|
+import com.hpplay.sdk.source.api.IBindSdkListener;
|
|
|
+import com.hpplay.sdk.source.api.IConnectListener;
|
|
|
+import com.hpplay.sdk.source.api.IDaPlayerListener;
|
|
|
+import com.hpplay.sdk.source.api.INewPlayerListener;
|
|
|
+import com.hpplay.sdk.source.api.LelinkSourceSDK;
|
|
|
+import com.hpplay.sdk.source.bean.CastBean;
|
|
|
+import com.hpplay.sdk.source.bean.DaCastBean;
|
|
|
+import com.hpplay.sdk.source.browse.api.AuthListener;
|
|
|
+import com.hpplay.sdk.source.browse.api.IAPI;
|
|
|
+import com.hpplay.sdk.source.browse.api.IBrowseListener;
|
|
|
+import com.hpplay.sdk.source.browse.api.LelinkServiceInfo;
|
|
|
+
|
|
|
+import org.json.JSONArray;
|
|
|
+import org.json.JSONObject;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+public class ScreenProjection {
|
|
|
+ private Context curContext;
|
|
|
+ private static boolean firstAuthSuccess = true;
|
|
|
+
|
|
|
+ public void initSDK(Context context) {
|
|
|
+ curContext = context;
|
|
|
+ LelinkSourceSDK.getInstance()
|
|
|
+ .setBindSdkListener(mBindSdkListener)
|
|
|
+ .setBrowseResultListener(mBrowseListener)
|
|
|
+ .setConnectListener(mConnectListener)
|
|
|
+ .setNewPlayListener(mPlayerListener)
|
|
|
+ .setDaPlayListener(mDaPlayerListener)
|
|
|
+ .setSdkInitInfo(context, "21602", "123e35a2f7a9b8e3ee8c00d2c4562328")
|
|
|
+ .bindSdk();
|
|
|
+ LelinkSourceSDK.getInstance().setOption(IAPI.OPTION_4, mAuthLister);
|
|
|
+ UnityMsgSender.log("initSDK");
|
|
|
+ }
|
|
|
+
|
|
|
+ IBindSdkListener mBindSdkListener = new IBindSdkListener() {
|
|
|
+ @Override
|
|
|
+ public void onBindCallback(boolean success) {
|
|
|
+ UnityMsgSender.log("onBindCallback:" + success);
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ List<LelinkServiceInfo> mBrowseList = new ArrayList<>();
|
|
|
+ IBrowseListener mBrowseListener = new IBrowseListener() {
|
|
|
+ @Override
|
|
|
+ public void onBrowse(int i, List<LelinkServiceInfo> list) {
|
|
|
+ if (i == IBrowseListener.BROWSE_ERROR_AUTH) {
|
|
|
+ UnityMsgSender.warn("授权失败");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (i == IBrowseListener.BROWSE_STOP) {
|
|
|
+ UnityMsgSender.warn("搜索停止");
|
|
|
+ } else if (i == IBrowseListener.BROWSE_TIMEOUT) {
|
|
|
+ UnityMsgSender.warn("搜索超时");
|
|
|
+ }
|
|
|
+ mBrowseList = list;
|
|
|
+ JSONArray jsonArray = new JSONArray();
|
|
|
+ for (LelinkServiceInfo item : list) {
|
|
|
+ JSONObject jo = new JSONObject();
|
|
|
+ try {
|
|
|
+ jo.put("name", item.getName());
|
|
|
+ jo.put("uid", item.getUid());
|
|
|
+ jo.put("udnUuid", item.getUdnUuid());
|
|
|
+ } catch (Exception e) {
|
|
|
+ UnityMsgSender.error("jo err");
|
|
|
+ }
|
|
|
+ jsonArray.put(jo);
|
|
|
+ }
|
|
|
+ UnityMsgSender.log("onBrowseItem: " + jsonArray.toString());
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ LelinkServiceInfo mSelectInfo;
|
|
|
+ IConnectListener mConnectListener = new IConnectListener() {
|
|
|
+ @Override
|
|
|
+ public void onConnect(LelinkServiceInfo lelinkServiceInfo, int protocol) {
|
|
|
+ UnityMsgSender.log("onConnect:" + lelinkServiceInfo.getName());
|
|
|
+ String type = protocol == IConnectListener.TYPE_LELINK ? "Lelink"
|
|
|
+ : protocol == IConnectListener.TYPE_DLNA ? "DLNA"
|
|
|
+ : protocol == IConnectListener.TYPE_IM ? "IM" : ("协议:" + protocol);
|
|
|
+ UnityMsgSender.log(type + " " + lelinkServiceInfo.getName() + "连接成功");
|
|
|
+ mSelectInfo = lelinkServiceInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onDisconnect(LelinkServiceInfo lelinkServiceInfo, int what, int extra) {
|
|
|
+ if (lelinkServiceInfo == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ UnityMsgSender.log("onDisconnect:" + lelinkServiceInfo.getName() + " disConnectType:" + what + " extra:" + extra);
|
|
|
+ String text = null;
|
|
|
+ if (what == IConnectListener.WHAT_HARASS_WAITING) {// 防骚扰,等待用户确认
|
|
|
+ // 乐播投屏防骚扰等待消息,请开发者务必处理该消息
|
|
|
+ text = lelinkServiceInfo.getName() + "等待用户确认";
|
|
|
+ } else if (what == IConnectListener.WHAT_DISCONNECT) {
|
|
|
+ switch (extra) {
|
|
|
+ case IConnectListener.EXTRA_HARASS_REJECT:// 防骚扰,用户拒绝投屏
|
|
|
+ text = lelinkServiceInfo.getName() + "连接被拒绝";
|
|
|
+ break;
|
|
|
+ case IConnectListener.EXTRA_HARASS_TIMEOUT:// 防骚扰,用户响应超时
|
|
|
+ text = lelinkServiceInfo.getName() + "防骚扰响应超时";
|
|
|
+ break;
|
|
|
+ case IConnectListener.EXTRA_HARASS_BLACKLIST:// 防骚扰,该用户被加入黑名单
|
|
|
+ text = lelinkServiceInfo.getName() + "已被加入投屏黑名单";
|
|
|
+ break;
|
|
|
+ case IConnectListener.EXTRA_CONNECT_DEVICE_OFFLINE:
|
|
|
+ text = lelinkServiceInfo.getName() + "不在线";
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ text = lelinkServiceInfo.getName() + "连接断开";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else if (what == IConnectListener.WHAT_CONNECT_FAILED) {
|
|
|
+ switch (extra) {
|
|
|
+ case IConnectListener.EXTRA_CONNECT_DEVICE_OFFLINE:
|
|
|
+ text = lelinkServiceInfo.getName() + "不在线";
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ text = lelinkServiceInfo.getName() + "连接失败";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (TextUtils.isEmpty(text)) {
|
|
|
+ text = "onDisconnect " + what + "/" + extra;
|
|
|
+ }
|
|
|
+ UnityMsgSender.log(text);
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ INewPlayerListener mPlayerListener = new INewPlayerListener() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onLoading(CastBean bean) {
|
|
|
+ UnityMsgSender.log("onLoading");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onStart(CastBean bean) {
|
|
|
+ UnityMsgSender.log("onStart");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onPause(CastBean bean) {
|
|
|
+ UnityMsgSender.log("onPause");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onCompletion(CastBean bean, int type) {
|
|
|
+ UnityMsgSender.log("onCompletion 1:" + type);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onStop(CastBean bean) {
|
|
|
+ UnityMsgSender.log("onStop");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onSeekComplete(CastBean bean, int position) {
|
|
|
+ UnityMsgSender.log("onSeekComplete 1:" + position);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onInfo(CastBean bean, final int what, final int extra) {
|
|
|
+ UnityMsgSender.log("onInfoA 1:" + what + " 2:" + extra);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onInfo(CastBean bean, int what, final String data) {
|
|
|
+ UnityMsgSender.log("onInfoB 1:" + what + " 2:" + data);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onError(CastBean bean, int what, int extra) {
|
|
|
+ UnityMsgSender.log("onError 1:" + what + " 2:" + extra);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onVolumeChanged(CastBean bean, float percent) {
|
|
|
+ UnityMsgSender.log("onVolumeChanged 1:" + percent);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onPositionUpdate(CastBean bean, long duration, long position) {
|
|
|
+ UnityMsgSender.log("onPositionUpdate 1:" + duration + " 2:" + position);
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ IDaPlayerListener mDaPlayerListener = new IDaPlayerListener() {
|
|
|
+ @Override
|
|
|
+ public void onResult(DaCastBean bean, boolean hasDa) {
|
|
|
+ UnityMsgSender.log("onResult 1:" + hasDa);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onLoading(DaCastBean bean) {
|
|
|
+ UnityMsgSender.log("onLoading");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onStart(DaCastBean bean) {
|
|
|
+ UnityMsgSender.log("onStart");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onStop(DaCastBean bean) {
|
|
|
+ UnityMsgSender.log("onStop");
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ AuthListener mAuthLister = new AuthListener() {
|
|
|
+ @Override
|
|
|
+ public void onAuthSuccess(String s, String s1) {
|
|
|
+ UnityMsgSender.log("onAuthSuccess 1:" + s + " 2:" + s1);
|
|
|
+ if (firstAuthSuccess) {
|
|
|
+ firstAuthSuccess = false;
|
|
|
+ LelinkSourceSDK.getInstance().setPermissionMode(IAPI.PERMISSION_MODE_CLOUD_LICENSE, getAndroidID(curContext));
|
|
|
+ UnityMsgSender.log("Permission License");
|
|
|
+ }
|
|
|
+ LelinkSourceSDK.getInstance().startBrowse();
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public void onAuthFailed(int i) {
|
|
|
+ UnityMsgSender.error("onAuthFailed 1:" + i);
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ String getAndroidID(Context context) {
|
|
|
+ try {
|
|
|
+ String sAndroidID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
|
|
|
+ return sAndroidID;
|
|
|
+ } catch (Exception e) {} catch (Error r) {}
|
|
|
+ try {
|
|
|
+ String sAndroidID = Settings.System.getString(context.getContentResolver(), Settings.System.ANDROID_ID);
|
|
|
+ return sAndroidID;
|
|
|
+ } catch (Exception e) {} catch (Error r) {}
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+}
|