|
|
@@ -1,246 +1,80 @@
|
|
|
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;
|
|
|
+ private static AuthFragment mAuthFragment = new AuthFragment();
|
|
|
+ private static BrowseFragment mBrowseFragment = new BrowseFragment();
|
|
|
+ private static ConnectFragment mConnectFragment = new ConnectFragment();
|
|
|
+ private static MirrorFragment mMirrorFragment = new MirrorFragment();
|
|
|
|
|
|
public void initSDK(Context context) {
|
|
|
- curContext = context;
|
|
|
+ //重新绑定时,测试发现没法覆盖最初绑定的监听器,因此各种Fragment对象都用static存储,保证全局唯一
|
|
|
+ mAuthFragment.setContext(context);
|
|
|
LelinkSourceSDK.getInstance()
|
|
|
- .setBindSdkListener(mBindSdkListener)
|
|
|
- .setBrowseResultListener(mBrowseListener)
|
|
|
- .setConnectListener(mConnectListener)
|
|
|
- .setNewPlayListener(mPlayerListener)
|
|
|
- .setDaPlayListener(mDaPlayerListener)
|
|
|
+ .setBindSdkListener(mAuthFragment.bindSdkListener)
|
|
|
+ .setBrowseResultListener(mBrowseFragment.browseListener)
|
|
|
+ .setConnectListener(mConnectFragment.connectListener)
|
|
|
+ .setNewPlayListener(mMirrorFragment.playerListener)
|
|
|
.setSdkInitInfo(context, "21602", "123e35a2f7a9b8e3ee8c00d2c4562328")
|
|
|
.bindSdk();
|
|
|
- LelinkSourceSDK.getInstance().setOption(IAPI.OPTION_4, mAuthLister);
|
|
|
+ LelinkSourceSDK.getInstance().setOption(IAPI.OPTION_4, mAuthFragment.authLister);
|
|
|
UnityMsgSender.log("initSDK");
|
|
|
}
|
|
|
|
|
|
- IBindSdkListener mBindSdkListener = new IBindSdkListener() {
|
|
|
- @Override
|
|
|
- public void onBindCallback(boolean success) {
|
|
|
- UnityMsgSender.log("onBindCallback:" + success);
|
|
|
- }
|
|
|
- };
|
|
|
+ public void unBindSdk() {
|
|
|
+ LelinkSourceSDK.getInstance().unBindSdk();
|
|
|
+ UnityMsgSender.log("unBindSdk");
|
|
|
+ }
|
|
|
|
|
|
- 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());
|
|
|
- }
|
|
|
- };
|
|
|
+ public void startBrowse() {
|
|
|
+ LelinkSourceSDK.getInstance().startBrowse();
|
|
|
+ }
|
|
|
|
|
|
- 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;
|
|
|
- }
|
|
|
+ public void stopBrowse() {
|
|
|
+ LelinkSourceSDK.getInstance().stopBrowse();
|
|
|
+ }
|
|
|
|
|
|
- @Override
|
|
|
- public void onDisconnect(LelinkServiceInfo lelinkServiceInfo, int what, int extra) {
|
|
|
- if (lelinkServiceInfo == null) {
|
|
|
+ public void connect(String uid) {
|
|
|
+ UnityMsgSender.log("start connect");
|
|
|
+ for (LelinkServiceInfo item: mBrowseFragment.getBrowseList()) {
|
|
|
+ if (item.getIp().equals(uid)) {
|
|
|
+ LelinkSourceSDK.getInstance().connect(item);
|
|
|
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");
|
|
|
}
|
|
|
+ UnityMsgSender.log("start connect fail, can not find target.");
|
|
|
+ }
|
|
|
|
|
|
- @Override
|
|
|
- public void onStop(DaCastBean bean) {
|
|
|
- UnityMsgSender.log("onStop");
|
|
|
- }
|
|
|
- };
|
|
|
+ public void startMirror(int resolutionCheckId) {
|
|
|
+ mMirrorFragment.startMirror(mConnectFragment.getSelectInfo(), resolutionCheckId);
|
|
|
+ }
|
|
|
|
|
|
- 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);
|
|
|
- }
|
|
|
- };
|
|
|
+ public void stopPlay() {
|
|
|
+ LelinkSourceSDK.getInstance().stopPlay();
|
|
|
+ }
|
|
|
|
|
|
- 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 "";
|
|
|
+ public void getConnectList() {
|
|
|
+ List<LelinkServiceInfo> list = LelinkSourceSDK.getInstance().getConnectInfos();
|
|
|
+ JSONArray jsonArray = new JSONArray();
|
|
|
+ for (LelinkServiceInfo item : list) {
|
|
|
+ JSONObject jo = new JSONObject();
|
|
|
+ try {
|
|
|
+ jo.put("name", item.getName());
|
|
|
+ jo.put("uid", item.getIp());
|
|
|
+ } catch (Exception e) {}
|
|
|
+ jsonArray.put(jo);
|
|
|
+ }
|
|
|
+ UnityMsgSender.log("getConnectList: " + jsonArray.toString());
|
|
|
}
|
|
|
}
|