Commit 465b73cf7f455fbcc7db4eb1933e1f2badddbec2

Authored by 简柏林
1 parent 0036f78b

代码提交

@@ -57,6 +57,12 @@ @@ -57,6 +57,12 @@
57 <meta-data 57 <meta-data
58 android:name="ScopedStorage" 58 android:name="ScopedStorage"
59 android:value="true" /> 59 android:value="true" />
  60 + <meta-data
  61 + android:name="com.rokid.uxr.application.mode"
  62 + android:value="3d" />
  63 + <meta-data
  64 + android:name="com.rokid.uxr.sdk.version"
  65 + android:value="10900" />
60 66
61 <!-- 适配 Android 7.0 文件意图 --> 67 <!-- 适配 Android 7.0 文件意图 -->
62 <provider 68 <provider
1 package com.studymachine.www.app; 1 package com.studymachine.www.app;
2 2
  3 +import android.app.Activity;
  4 +import android.app.AppOpsManager;
3 import android.content.Context; 5 import android.content.Context;
4 import android.content.Intent; 6 import android.content.Intent;
5 import android.hardware.display.DisplayManager; 7 import android.hardware.display.DisplayManager;
6 import android.hardware.usb.UsbDevice; 8 import android.hardware.usb.UsbDevice;
  9 +import android.net.Uri;
  10 +import android.os.Binder;
7 import android.os.Build; 11 import android.os.Build;
8 import android.os.Bundle; 12 import android.os.Bundle;
  13 +import android.provider.Settings;
9 import android.view.Display; 14 import android.view.Display;
10 import android.view.View; 15 import android.view.View;
11 import android.view.WindowManager; 16 import android.view.WindowManager;
@@ -40,6 +45,9 @@ import com.studymachine.www.ui.presentation.WebPresentation; @@ -40,6 +45,9 @@ import com.studymachine.www.ui.presentation.WebPresentation;
40 45
41 import org.greenrobot.eventbus.EventBus; 46 import org.greenrobot.eventbus.EventBus;
42 47
  48 +import java.lang.reflect.Field;
  49 +import java.lang.reflect.Method;
  50 +
43 import okhttp3.Call; 51 import okhttp3.Call;
44 52
45 /** 53 /**
@@ -71,7 +79,8 @@ public abstract class AppActivity extends BaseActivity @@ -71,7 +79,8 @@ public abstract class AppActivity extends BaseActivity
71 */ 79 */
72 private int mDialogCount; 80 private int mDialogCount;
73 81
74 - public GlassInfo deviceInfo = RKGlassDevice.getInstance().getGlassInfo();; 82 + public GlassInfo deviceInfo = RKGlassDevice.getInstance().getGlassInfo();
  83 + ;
75 84
76 MutableLiveData<Boolean> connectStatus = new MutableLiveData(); 85 MutableLiveData<Boolean> connectStatus = new MutableLiveData();
77 86
@@ -131,30 +140,69 @@ public abstract class AppActivity extends BaseActivity @@ -131,30 +140,69 @@ public abstract class AppActivity extends BaseActivity
131 mDialog.dismiss(); 140 mDialog.dismiss();
132 } 141 }
133 142
  143 + //判断是否开启悬浮窗权限 context可以用你的Activity.或者tiis
  144 + public static boolean checkFloatPermission(Context context) {
  145 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
  146 + return true;
  147 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
  148 + try {
  149 + Class cls = Class.forName("android.content.Context");
  150 + Field declaredField = cls.getDeclaredField("APP_OPS_SERVICE");
  151 + declaredField.setAccessible(true);
  152 + Object obj = declaredField.get(cls);
  153 + if (!(obj instanceof String)) {
  154 + return false;
  155 + }
  156 + String str2 = (String) obj;
  157 + obj = cls.getMethod("getSystemService", String.class).invoke(context, str2);
  158 + cls = Class.forName("android.app.AppOpsManager");
  159 + Field declaredField2 = cls.getDeclaredField("MODE_ALLOWED");
  160 + declaredField2.setAccessible(true);
  161 + Method checkOp = cls.getMethod("checkOp", Integer.TYPE, Integer.TYPE, String.class);
  162 + int result = (Integer) checkOp.invoke(obj, 24, Binder.getCallingUid(), context.getPackageName());
  163 + return result == declaredField2.getInt(cls);
  164 + } catch (Exception e) {
  165 + return false;
  166 + }
  167 + } else {
  168 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  169 + AppOpsManager appOpsMgr = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
  170 + if (appOpsMgr == null)
  171 + return false;
  172 + int mode = appOpsMgr.checkOpNoThrow("android:system_alert_window", android.os.Process.myUid(), context
  173 + .getPackageName());
  174 + return mode == AppOpsManager.MODE_ALLOWED || mode == AppOpsManager.MODE_IGNORED;
  175 + } else {
  176 + return Settings.canDrawOverlays(context);
  177 + }
  178 + }
  179 + }
  180 +
  181 + private void requestSettingCanDrawOverlays() {
  182 + int sdkInt = Build.VERSION.SDK_INT;
  183 + if (sdkInt >= Build.VERSION_CODES.O) {//8.0以上
  184 + Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
  185 + startActivity(intent);
  186 + } else if (sdkInt >= Build.VERSION_CODES.M) {//6.0-8.0
  187 + Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
  188 + intent.setData(Uri.parse("package:" + getPackageName()));
  189 + startActivity(intent);
  190 + } else {//4.4-6.0以下
  191 + //无需处理了
  192 + }
  193 + }
  194 +
134 @Override 195 @Override
135 protected void initLayout() { 196 protected void initLayout() {
136 - if(!RKGlassDevice.getInstance().requestUSBDevicePermission()){ 197 + if (!checkFloatPermission(this)) {
  198 + //权限请求方法
  199 + requestSettingCanDrawOverlays();
  200 + }
  201 + if (!RKGlassDevice.getInstance().requestUSBDevicePermission()) {
137 toast("请到系统设置添加悬浮框权限"); 202 toast("请到系统设置添加悬浮框权限");
138 finish(); 203 finish();
139 } 204 }
140 - RKGlassDevice.getInstance().init(new OnGlassDeviceConnectListener() {  
141 - @Override  
142 - public void onGlassDeviceConnected(UsbDevice usbDevice) {  
143 -// //Glass 设备连接成功  
144 -// addControllerView();  
145 - connectStatus.setValue(true);  
146 - openAppPresentation();  
147 - }  
148 -  
149 - @Override  
150 - public void onGlassDeviceDisconnected() {  
151 - connectStatus.setValue(false);  
152 - ActivityManager.getInstance().finishAllActivities();  
153 -// mControllerBid.setVisibility(View.GONE);  
154 - }  
155 - });  
156 205
157 - deviceInfo = RKGlassDevice.getInstance().getGlassInfo();  
158 super.initLayout(); 206 super.initLayout();
159 if (getTitleBar() != null) { 207 if (getTitleBar() != null) {
160 getTitleBar().setOnTitleBarListener(this); 208 getTitleBar().setOnTitleBarListener(this);
@@ -172,6 +220,30 @@ public abstract class AppActivity extends BaseActivity @@ -172,6 +220,30 @@ public abstract class AppActivity extends BaseActivity
172 //保持常亮 220 //保持常亮
173 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 221 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
174 EventBusManager.register(this); 222 EventBusManager.register(this);
  223 + RKGlassDevice.getInstance().init(new OnGlassDeviceConnectListener() {
  224 + @Override
  225 + public void onGlassDeviceConnected(UsbDevice usbDevice) {
  226 +// //Glass 设备连接成功
  227 +// addControllerView();
  228 + if (isDestroyed()){
  229 + return;
  230 + }
  231 + connectStatus.setValue(true);
  232 + openAppPresentation();
  233 + }
  234 +
  235 + @Override
  236 + public void onGlassDeviceDisconnected() {
  237 + if (isDestroyed()){
  238 + return;
  239 + }
  240 +
  241 + connectStatus.setValue(false);
  242 + ActivityManager.getInstance().finishAllActivities();
  243 +// mControllerBid.setVisibility(View.GONE);
  244 + }
  245 + });
  246 + deviceInfo = RKGlassDevice.getInstance().getGlassInfo();
175 } 247 }
176 248
177 /** 249 /**
@@ -289,6 +361,12 @@ public abstract class AppActivity extends BaseActivity @@ -289,6 +361,12 @@ public abstract class AppActivity extends BaseActivity
289 } 361 }
290 362
291 @Override 363 @Override
  364 + protected void onResume() {
  365 + RKGlassDevice.getInstance().setDisplayMode(RKGlassDevice.GlassDisplayMode.MODE_2D);
  366 + super.onResume();
  367 + }
  368 +
  369 + @Override
292 protected void onDestroy() { 370 protected void onDestroy() {
293 super.onDestroy(); 371 super.onDestroy();
294 if (isShowDialog()) { 372 if (isShowDialog()) {
@@ -154,13 +154,13 @@ public final class AppApplication extends Application { @@ -154,13 +154,13 @@ public final class AppApplication extends Application {
154 @Override 154 @Override
155 public void onGlassDeviceConnected(UsbDevice usbDevice) { 155 public void onGlassDeviceConnected(UsbDevice usbDevice) {
156 //Glass 设备连接成功 156 //Glass 设备连接成功
157 - MutableLiveData<Boolean> connectStatus = new MutableLiveData();  
158 - connectStatus.setValue(true); 157 +// MutableLiveData<Boolean> connectStatus = new MutableLiveData();
  158 +// connectStatus.setValue(true);
159 } 159 }
160 160
161 @Override 161 @Override
162 public void onGlassDeviceDisconnected() { 162 public void onGlassDeviceDisconnected() {
163 - ActivityManager.getInstance().finishAllActivities(); 163 +// ActivityManager.getInstance().finishAllActivities();
164 //Glass 设备断开连接 164 //Glass 设备断开连接
165 } 165 }
166 }); 166 });
@@ -2,9 +2,14 @@ package com.studymachine.www.js; @@ -2,9 +2,14 @@ package com.studymachine.www.js;
2 2
3 3
4 import android.app.Activity; 4 import android.app.Activity;
  5 +import android.content.Context;
5 import android.graphics.drawable.Drawable; 6 import android.graphics.drawable.Drawable;
  7 +import android.hardware.display.DisplayManager;
  8 +import android.os.Build;
6 import android.os.Handler; 9 import android.os.Handler;
7 import android.os.Looper; 10 import android.os.Looper;
  11 +import android.view.Display;
  12 +import android.view.WindowManager;
8 import android.webkit.JavascriptInterface; 13 import android.webkit.JavascriptInterface;
9 14
10 15
@@ -25,6 +30,7 @@ import com.studymachine.www.app.AppPresentation; @@ -25,6 +30,7 @@ import com.studymachine.www.app.AppPresentation;
25 import com.studymachine.www.app.ModeHandler; 30 import com.studymachine.www.app.ModeHandler;
26 import com.studymachine.www.event.SwfEvent; 31 import com.studymachine.www.event.SwfEvent;
27 import com.studymachine.www.http.glide.GlideApp; 32 import com.studymachine.www.http.glide.GlideApp;
  33 +import com.studymachine.www.manager.ActivityManager;
28 import com.studymachine.www.manager.GlobalParameterManager; 34 import com.studymachine.www.manager.GlobalParameterManager;
29 import com.studymachine.www.manager.UserManager; 35 import com.studymachine.www.manager.UserManager;
30 import com.studymachine.www.other.AppConfig; 36 import com.studymachine.www.other.AppConfig;
@@ -35,6 +41,7 @@ import com.studymachine.www.ui.activity.AiListActivity; @@ -35,6 +41,7 @@ import com.studymachine.www.ui.activity.AiListActivity;
35 import com.studymachine.www.ui.activity.BrowserActivity; 41 import com.studymachine.www.ui.activity.BrowserActivity;
36 import com.studymachine.www.ui.activity.SwfActivity; 42 import com.studymachine.www.ui.activity.SwfActivity;
37 import com.studymachine.www.ui.dialog.WaitDialog; 43 import com.studymachine.www.ui.dialog.WaitDialog;
  44 +import com.studymachine.www.ui.presentation.BrowserPresentation;
38 import com.studymachine.www.widget.X5WebView; 45 import com.studymachine.www.widget.X5WebView;
39 46
40 import org.greenrobot.eventbus.EventBus; 47 import org.greenrobot.eventbus.EventBus;
@@ -246,8 +253,10 @@ public class MainJavaScriptInterface { @@ -246,8 +253,10 @@ public class MainJavaScriptInterface {
246 } 253 }
247 254
248 Tool.startOtherApp(mContext, packageName); 255 Tool.startOtherApp(mContext, packageName);
  256 + ActivityManager.getInstance().finishAllActivities();
249 if (presentation != null) { 257 if (presentation != null) {
250 presentation.dismiss(); 258 presentation.dismiss();
  259 + presentation = null;
251 } 260 }
252 } 261 }
253 262
@@ -8,6 +8,8 @@ import androidx.annotation.NonNull; @@ -8,6 +8,8 @@ import androidx.annotation.NonNull;
8 import androidx.annotation.Nullable; 8 import androidx.annotation.Nullable;
9 import androidx.collection.ArrayMap; 9 import androidx.collection.ArrayMap;
10 10
  11 +import com.rokid.axr.phone.glassdevice.RKGlassDevice;
  12 +
11 import java.util.ArrayList; 13 import java.util.ArrayList;
12 14
13 import timber.log.Timber; 15 import timber.log.Timber;
@@ -122,6 +124,7 @@ public final class ActivityManager implements Application.ActivityLifecycleCallb @@ -122,6 +124,7 @@ public final class ActivityManager implements Application.ActivityLifecycleCallb
122 */ 124 */
123 public void finishAllActivities() { 125 public void finishAllActivities() {
124 finishAllActivities((Class<? extends Activity>) null); 126 finishAllActivities((Class<? extends Activity>) null);
  127 + RKGlassDevice.getInstance().deInit();
125 } 128 }
126 129
127 /** 130 /**
@@ -109,10 +109,13 @@ public final class BrowserActivity extends AppActivity @@ -109,10 +109,13 @@ public final class BrowserActivity extends AppActivity
109 109
110 @Override 110 @Override
111 protected void initData() { 111 protected void initData() {
112 - if (deviceInfo != null && deviceInfo.getSn() != null) { 112 + if (deviceInfo != null && deviceInfo.getSn() != null && deviceInfo.isvSyncStatus()) {
113 mControlBack = findViewById(R.id.control_back); 113 mControlBack = findViewById(R.id.control_back);
114 mControlChange = findViewById(R.id.control_change); 114 mControlChange = findViewById(R.id.control_change);
115 mControlMode = findViewById(R.id.control_mode); 115 mControlMode = findViewById(R.id.control_mode);
  116 + if (mControlBack == null){
  117 + return;
  118 + }
116 mControlBack.setVisibility(View.VISIBLE); 119 mControlBack.setVisibility(View.VISIBLE);
117 mControlChange.setVisibility(View.VISIBLE); 120 mControlChange.setVisibility(View.VISIBLE);
118 mControlMode.setVisibility(View.GONE); 121 mControlMode.setVisibility(View.GONE);
@@ -211,10 +214,17 @@ public final class BrowserActivity extends AppActivity @@ -211,10 +214,17 @@ public final class BrowserActivity extends AppActivity
211 } else { 214 } else {
212 presentation.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY); 215 presentation.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);
213 } 216 }
  217 + } else {
  218 + return;
214 } 219 }
215 } 220 }
216 presentation.setOwnerActivity(this); 221 presentation.setOwnerActivity(this);
217 - presentation.show(); 222 + try {
  223 + presentation.show();
  224 + } catch (Exception e) {
  225 + presentation.dismiss();
  226 + presentation.show();
  227 + }
218 presentation.setMode(0); 228 presentation.setMode(0);
219 } 229 }
220 230
@@ -41,10 +41,10 @@ public final class RestartActivity extends AppActivity { @@ -41,10 +41,10 @@ public final class RestartActivity extends AppActivity {
41 Intent intent; 41 Intent intent;
42 if (UserManager.getInstance().getToken()==null) { 42 if (UserManager.getInstance().getToken()==null) {
43 // 如果是未登录的情况下跳转到闪屏页 43 // 如果是未登录的情况下跳转到闪屏页
44 - intent = new Intent(context, LoginActivity.class); 44 + intent = new Intent(context, SplashActivity.class);
45 } else { 45 } else {
46 // 如果是已登录的情况下跳转到首页 46 // 如果是已登录的情况下跳转到首页
47 - intent = new Intent(context, HomeActivity.class); 47 + intent = new Intent(context, SplashActivity.class);
48 } 48 }
49 if (!(context instanceof Activity)) { 49 if (!(context instanceof Activity)) {
50 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 50 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -2,9 +2,11 @@ package com.studymachine.www.ui.presentation; @@ -2,9 +2,11 @@ package com.studymachine.www.ui.presentation;
2 2
3 import static com.hjq.http.EasyUtils.post; 3 import static com.hjq.http.EasyUtils.post;
4 4
  5 +import android.app.Activity;
5 import android.content.Context; 6 import android.content.Context;
6 import android.graphics.Bitmap; 7 import android.graphics.Bitmap;
7 import android.graphics.drawable.BitmapDrawable; 8 import android.graphics.drawable.BitmapDrawable;
  9 +import android.os.Build;
8 import android.os.Message; 10 import android.os.Message;
9 import android.view.Display; 11 import android.view.Display;
10 import android.view.View; 12 import android.view.View;