From 64ecbe17f4cb264cfdd5f1e64c69c6ecb9bdc058 Mon Sep 17 00:00:00 2001 From: cebgcontract <99630598+cebgcontract@users.noreply.github.com> Date: Wed, 31 Aug 2022 16:48:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=8C=E7=BB=B4=E7=A0=81?= =?UTF-8?q?=E6=89=AB=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/AndroidManifest.xml | 4 + app/build.gradle | 4 + .../fitchgc/headlesscocos/MainActivity.java | 293 +++++++++++++----- app/src/com/jc/jcfw/JcSDK.java | 10 +- js/main.js | 18 +- js/platform.js | 16 +- res/anim/in.xml | 5 + res/anim/out.xml | 5 + res/values/strings.xml | 1 + 9 files changed, 270 insertions(+), 86 deletions(-) create mode 100644 res/anim/in.xml create mode 100644 res/anim/out.xml diff --git a/app/AndroidManifest.xml b/app/AndroidManifest.xml index cd3ba49..4693a06 100644 --- a/app/AndroidManifest.xml +++ b/app/AndroidManifest.xml @@ -22,6 +22,10 @@ + + list) { + // Some permissions have been granted + } - // Pause Unity - @Override protected void onPause() - { - super.onPause(); - mUnityPlayer.pause(); + @Override + public void onPermissionsDenied(int requestCode, List list) { + // Some permissions have been denied + // ... } - // Resume Unity - @Override protected void onResume() - { - super.onResume(); - mUnityPlayer.resume(); - } + // end of easypermissions - @Override protected void onStart() - { - super.onStart(); - mUnityPlayer.start(); - } - - @Override protected void onStop() - { - super.onStop(); - mUnityPlayer.stop(); - } - - // Low Memory Unity - @Override public void onLowMemory() - { - super.onLowMemory(); - mUnityPlayer.lowMemory(); - } - - // Trim Memory Unity - @Override public void onTrimMemory(int level) - { - super.onTrimMemory(level); - if (level == TRIM_MEMORY_RUNNING_CRITICAL) - { - mUnityPlayer.lowMemory(); + // begin of qrcode + /** + * 检测拍摄权限 + */ + @AfterPermissionGranted(RC_CAMERA) + private void checkCameraPermissions(){ + String[] perms = {Manifest.permission.CAMERA}; + if (EasyPermissions.hasPermissions(this, perms)) { + startScan(title); + } else { + // Do not have permissions, request them now + EasyPermissions.requestPermissions(this, getString(R.string.permission_camera), + RC_CAMERA, perms); } } - // This ensures the layout will be correct. - @Override public void onConfigurationChanged(Configuration newConfig) - { - super.onConfigurationChanged(newConfig); - mUnityPlayer.configurationChanged(newConfig); + /** + * scan qrcode + */ + private void startScan(String title){ + ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeCustomAnimation(this,R.anim.in,R.anim.out); + Intent intent = new Intent(this, CaptureActivity.class); + intent.putExtra(KEY_TITLE, title); + intent.putExtra(KEY_IS_CONTINUOUS, false); + this.startActivityForResult(intent, REQUEST_CODE_SCAN, optionsCompat.toBundle()); +// ActivityCompat.startActivityForResult(this, intent, REQUEST_CODE_SCAN, optionsCompat.toBundle()); } - // Notify Unity of the focus change. - @Override public void onWindowFocusChanged(boolean hasFocus) - { - super.onWindowFocusChanged(hasFocus); - mUnityPlayer.windowFocusChanged(hasFocus); + private void asyncThread(Runnable runnable){ + new Thread(runnable).start(); } - // For some reason the multiple keyevent type is not supported by the ndk. - // Force event injection by overriding dispatchKeyEvent(). - @Override public boolean dispatchKeyEvent(KeyEvent event) - { - if (event.getAction() == KeyEvent.ACTION_MULTIPLE) - return mUnityPlayer.injectEvent(event); - return super.dispatchKeyEvent(event); + private void parsePhoto(Intent data){ + try { + Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),data.getData()); + asyncThread(() -> { + final String result = CodeUtils.parseCode(bitmap); + runOnUiThread(() -> { + LogUtils.d("result:" + result); + Toast.makeText(getContext(),result,Toast.LENGTH_SHORT).show(); + }); + }); + + } catch (Exception e) { + e.printStackTrace(); + } + + } + + public void showQRScan(String title) { + this.title = title; + checkCameraPermissions(); } - // Pass any events not handled by (unfocused) views straight to UnityPlayer - @Override public boolean onKeyUp(int keyCode, KeyEvent event) { return mUnityPlayer.injectEvent(event); } - @Override public boolean onKeyDown(int keyCode, KeyEvent event) { return mUnityPlayer.injectEvent(event); } - @Override public boolean onTouchEvent(MotionEvent event) { return mUnityPlayer.injectEvent(event); } - /*API12*/ public boolean onGenericMotionEvent(MotionEvent event) { return mUnityPlayer.injectEvent(event); } } \ No newline at end of file diff --git a/app/src/com/jc/jcfw/JcSDK.java b/app/src/com/jc/jcfw/JcSDK.java index 132bcac..c47f91f 100644 --- a/app/src/com/jc/jcfw/JcSDK.java +++ b/app/src/com/jc/jcfw/JcSDK.java @@ -27,7 +27,7 @@ public class JcSDK { commonCB.stringCallback("wallet init success"); } -// public static void connectwallet(String url){ +// public static void connectWallet(String url){ // Uri uri = Uri.parse(url); // Log.i(TAG, url); // Intent intent = new Intent(Intent.ACTION_VIEW, uri); @@ -46,10 +46,10 @@ public class JcSDK { */ public static void toWallet(String url) { - Uri uri = Uri.parse(url); + Intent intent = new Intent(Intent.ACTION_VIEW); Log.i(TAG, url); - Intent intent = new Intent(Intent.ACTION_VIEW, uri); try { + intent.setData(Uri.parse(url)); MainActivity.app.startActivity(intent); } catch (ActivityNotFoundException e) { Intent i = new Intent(Intent.ACTION_VIEW); @@ -57,4 +57,8 @@ public class JcSDK { MainActivity.app.startActivity(i); } } + + public static void scanQRCode(String title) { + MainActivity.app.showQRScan(title); + } } diff --git a/js/main.js b/js/main.js index d3d5085..f50579f 100644 --- a/js/main.js +++ b/js/main.js @@ -224,7 +224,6 @@ function sendErc20(funId, address, to, amount) { function restoreFromMnemonic(funId, mnemonic, password) { try { - diameter = parseFloat(diameter); let result = jc.wallet.restoreFromMnemonic(mnemonic, password); return JSON.stringify({errcode: 0, data: result}); } catch(err) { @@ -232,3 +231,20 @@ function restoreFromMnemonic(funId, mnemonic, password) { } } +function scanQRCode(funId, title) { + try { + jsb.scanQRCode(title); + return JSON.stringify({errcode: 0}); + } catch(err) { + return JSON.stringify({errcode: 1, errmsg: err}); + } +} +//function toWalletJNI(funId, url) { +// try { +// jsb.toWallet(url); +// return JSON.stringify({errcode: 0}); +// } catch(err) { +// return JSON.stringify({errcode: 1, errmsg: err}); +// } +//} + diff --git a/js/platform.js b/js/platform.js index ae84c3e..43809e0 100644 --- a/js/platform.js +++ b/js/platform.js @@ -6,11 +6,13 @@ if (window.JavascriptJavaBridge) { } window.jumpToWallet = function(url) { - console.log(url); - jsb.reflection.callStaticMethod( - 'com/jc/jcfw/JcSDK', - 'toWallet', - '(Ljava/lang/String;)V', - url || 'wc://' - ) + url = url || 'wc://'; + console.log('jumpToWallet: ' + url); + jsb.toWallet(url); +// jsb.reflection.callStaticMethod( +// 'com/jc/jcfw/JcSDK', +// 'toWallet', +// '(Ljava/lang/String;)V', +// url || 'wc://' +// ) } \ No newline at end of file diff --git a/res/anim/in.xml b/res/anim/in.xml new file mode 100644 index 0000000..620c2ab --- /dev/null +++ b/res/anim/in.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/res/anim/out.xml b/res/anim/out.xml new file mode 100644 index 0000000..fea8da4 --- /dev/null +++ b/res/anim/out.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 2486a46..3ced31a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1,4 +1,5 @@ HeadlessCocos Game view + Scan QRCode need camera permission \ No newline at end of file