From 36f02424046dd4917eb37e588bf91edd010de1e2 Mon Sep 17 00:00:00 2001 From: wangbing Date: Fri, 15 Mar 2019 23:28:23 +0800 Subject: [PATCH] Android --- .../javafx/ctrl/AndroidOptionController.java | 20 +++++ .../manger/callable/AndroidCallable.java | 19 +++- .../dbtool/javafx/po/AndroidOption.java | 2 + .../xyz/wbsite/dbtool/javafx/tool/Dialog.java | 33 +++---- src/main/resources/fxml/androidOption.fxml | 6 +- .../modules/Android/app/build.gradles | 13 ++- .../Android/app/src/main/AndroidManifest.xml | 8 +- .../app/src/main/java/WBUIMainActivity.java | 53 +++-------- .../java/base/activity/QRcodeActivity.java | 88 +++++++------------ .../base/activity/QRcodeScanActivity.java | 69 +++++++++++++++ .../main/java/fragment/WebViewFragment.java | 2 +- ...ty_qrcode.xml => activity_qrcode_scan.xml} | 0 12 files changed, 189 insertions(+), 124 deletions(-) create mode 100644 src/main/resources/modules/Android/app/src/main/java/base/activity/QRcodeScanActivity.java rename src/main/resources/modules/Android/app/src/main/res/layout/{activity_qrcode.xml => activity_qrcode_scan.xml} (100%) diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/AndroidOptionController.java b/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/AndroidOptionController.java index 417455de..f4d0fda9 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/AndroidOptionController.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/AndroidOptionController.java @@ -16,6 +16,10 @@ public class AndroidOptionController { @FXML private CheckBox webview; @FXML + private CheckBox fileselect; + @FXML + private CheckBox qrcode; + @FXML private Button ok; @FXML private Button cancel; @@ -67,4 +71,20 @@ public class AndroidOptionController { public void setWebview(CheckBox webview) { this.webview = webview; } + + public CheckBox getFileselect() { + return fileselect; + } + + public void setFileselect(CheckBox fileselect) { + this.fileselect = fileselect; + } + + public CheckBox getQrcode() { + return qrcode; + } + + public void setQrcode(CheckBox qrcode) { + this.qrcode = qrcode; + } } diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/AndroidCallable.java b/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/AndroidCallable.java index fe163d49..a0029bee 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/AndroidCallable.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/AndroidCallable.java @@ -90,6 +90,8 @@ public class AndroidCallable implements Callable { { HashMap ctx = new HashMap(); ctx.put("package", option.packages); + ctx.put("qrcode", option.qrcode); + ctx.put("fileselect", option.fileselect); freeMarkerManager.outputTemp(new File(app, "build.gradle"), "Android/app/build.gradles", ctx); Tool.outputResource("Android/app/proguard-rules.pro", new File(app, "proguard-rules.pro")); } @@ -98,6 +100,8 @@ public class AndroidCallable implements Callable { HashMap ctx = new HashMap(); ctx.put("package", option.packages); ctx.put("domain", option.domain); + ctx.put("qrcode", option.qrcode); + ctx.put("fileselect", option.fileselect); freeMarkerManager.outputTemp(new File(main, "AndroidManifest.xml"), "Android/app/src/main/AndroidManifest.xml", ctx); } @@ -112,9 +116,13 @@ public class AndroidCallable implements Callable { freeMarkerManager.outputTemp(new File(base, "BaseSPATakePhotoFragment.java"), "Android/app/src/main/java/base/BaseSPATakePhotoFragment.java", ctx); freeMarkerManager.outputTemp(new File(base, "IActivityResult.java"), "Android/app/src/main/java/base/IActivityResult.java", ctx); - freeMarkerManager.outputTemp(new File(activity, "FilePickerActivity.java"), "Android/app/src/main/java/base/activity/FilePickerActivity.java", ctx); - freeMarkerManager.outputTemp(new File(activity, "QRcodeActivity.java"), "Android/app/src/main/java/base/activity/QRcodeActivity.java", ctx); - + if (option.fileselect) { + freeMarkerManager.outputTemp(new File(activity, "FilePickerActivity.java"), "Android/app/src/main/java/base/activity/FilePickerActivity.java", ctx); + } + if (option.qrcode) { + freeMarkerManager.outputTemp(new File(activity, "QRcodeActivity.java"), "Android/app/src/main/java/base/activity/QRcodeActivity.java", ctx); + freeMarkerManager.outputTemp(new File(activity, "QRcodeScanActivity.java"), "Android/app/src/main/java/base/activity/QRcodeScanActivity.java", ctx); + } freeMarkerManager.outputTemp(new File(service, "RestartService.java"), "Android/app/src/main/java/base/service/RestartService.java", ctx); @@ -146,6 +154,7 @@ public class AndroidCallable implements Callable { HashMap ctx = new HashMap(); ctx.put("package", option.packages); ctx.put("domain", option.domain); + ctx.put("webview", option.webview); freeMarkerManager.outputTemp(new File(domain, "WBUIApplication.java"), "Android/app/src/main/java/WBUIApplication.java", ctx); freeMarkerManager.outputTemp(new File(domain, "WBUIMainActivity.java"), "Android/app/src/main/java/WBUIMainActivity.java", ctx); } @@ -164,7 +173,9 @@ public class AndroidCallable implements Callable { { Tool.outputResource("Android/app/src/main/res/drawable/background.xml", new File(drawable, "background.xml")); - Tool.outputResource("Android/app/src/main/res/layout/activity_qrcode.xml", new File(layout, "activity_qrcode.xml")); + if (option.qrcode) { + Tool.outputResource("Android/app/src/main/res/layout/activity_qrcode_scan.xml", new File(layout, "activity_qrcode_scan.xml")); + } if (option.webview) { Tool.outputResource("Android/app/src/main/res/layout/fragment_webview.xml", new File(layout, "fragment_webview.xml")); } else { diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/po/AndroidOption.java b/src/main/java/xyz/wbsite/dbtool/javafx/po/AndroidOption.java index 16f0b01f..62509a60 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/po/AndroidOption.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/po/AndroidOption.java @@ -5,4 +5,6 @@ public class AndroidOption { public String packages; public String domain; public boolean webview; + public boolean fileselect; + public boolean qrcode; } diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/tool/Dialog.java b/src/main/java/xyz/wbsite/dbtool/javafx/tool/Dialog.java index 63e066b2..1d6918e0 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/tool/Dialog.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/tool/Dialog.java @@ -580,21 +580,24 @@ public class Dialog { directoryChooser.setInitialDirectory(new File(dBmanger.getPath())); Stage stage = new Stage(); File file = directoryChooser.showDialog(stage); - - System.out.println("生成目录:" + file.getAbsolutePath()); - AndroidOption androidOption = new AndroidOption(); - androidOption.projectName = controller.getName().getText(); - androidOption.packages = controller.getPackages().getText(); - androidOption.domain = controller.getDomain().getText(); - androidOption.webview = controller.getWebview().isSelected(); - - dBmanger.generateAndroid(file.getAbsolutePath(), androidOption); - Platform.runLater(new Runnable() { - @Override - public void run() { - stage.close(); - } - }); + if (file!=null){ + System.out.println("生成目录:" + file.getAbsolutePath()); + AndroidOption androidOption = new AndroidOption(); + androidOption.projectName = controller.getName().getText(); + androidOption.packages = controller.getPackages().getText(); + androidOption.domain = controller.getDomain().getText(); + androidOption.webview = controller.getWebview().isSelected(); + androidOption.qrcode = controller.getQrcode().isSelected(); + androidOption.fileselect = controller.getFileselect().isSelected(); + + dBmanger.generateAndroid(file.getAbsolutePath(), androidOption); + Platform.runLater(new Runnable() { + @Override + public void run() { + stage.close(); + } + }); + } } }); diff --git a/src/main/resources/fxml/androidOption.fxml b/src/main/resources/fxml/androidOption.fxml index cfa43201..d3e8fb3c 100644 --- a/src/main/resources/fxml/androidOption.fxml +++ b/src/main/resources/fxml/androidOption.fxml @@ -33,7 +33,11 @@ - + + + + + diff --git a/src/main/resources/modules/Android/app/build.gradles b/src/main/resources/modules/Android/app/build.gradles index ad876a13..6289b22e 100644 --- a/src/main/resources/modules/Android/app/build.gradles +++ b/src/main/resources/modules/Android/app/build.gradles @@ -15,14 +15,15 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + android.applicationVariants.all { variant -> + variant.outputs.all { + outputFileName = rootProject.getName() + "-v" + defaultConfig.versionName + ".apk" + } + } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'com.android.support:appcompat-v7:26.1.0' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' //QMUI implementation 'com.qmuiteam:qmui:1.1.3' @@ -36,11 +37,15 @@ dependencies { implementation 'com.github.chrisbanes:PhotoView:1.2.6' //权限申请框架 implementation 'com.yanzhenjie:permission:2.0.0-rc12' +<#if qrcode> //二维码 implementation 'com.google.zxing:core:3.3.2' implementation'com.journeyapps:zxing-android-embedded:3.6.0' + +<#if fileselect> //文件选择 implementation 'com.leon:lfilepickerlibrary:1.7.0' + //Picker implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:1.5.6' } diff --git a/src/main/resources/modules/Android/app/src/main/AndroidManifest.xml b/src/main/resources/modules/Android/app/src/main/AndroidManifest.xml index 26da84ce..79f64895 100644 --- a/src/main/resources/modules/Android/app/src/main/AndroidManifest.xml +++ b/src/main/resources/modules/Android/app/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ package="${package}"> - +<#if fileselect> + +<#if qrcode> + - + diff --git a/src/main/resources/modules/Android/app/src/main/java/WBUIMainActivity.java b/src/main/resources/modules/Android/app/src/main/java/WBUIMainActivity.java index b94c9f02..be8fab89 100644 --- a/src/main/resources/modules/Android/app/src/main/java/WBUIMainActivity.java +++ b/src/main/resources/modules/Android/app/src/main/java/WBUIMainActivity.java @@ -1,21 +1,14 @@ package ${domain}; -import android.Manifest; -import android.content.Intent; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.widget.Toast; - -import com.google.zxing.integration.android.IntentIntegrator; -import com.google.zxing.integration.android.IntentResult; -import com.yanzhenjie.permission.Action; -import com.yanzhenjie.permission.AndPermission; - -import java.util.List; import ${package}.R; import ${domain}.base.BaseSPAActivity; -import ${domain}.base.Consant; +<#if webview> +import ${domain}.fragment.WebViewFragment; + +<#if !webview> import ${domain}.fragment.MainFragment; + public class WBUIMainActivity extends BaseSPAActivity { @@ -31,41 +24,17 @@ public class WBUIMainActivity extends BaseSPAActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - - AndPermission.with(this).runtime().permission(Manifest.permission.READ_EXTERNAL_STORAGE).onGranted(new Action>() { - @Override - public void onAction(List data) { - startFirstFragment(new MainFragment()); - } - }).onDenied(new Action>() { - @Override - public void onAction(List data) { - startFirstFragment(new MainFragment()); - } - }).start(); +<#if webview> + startFirstFragment(new WebViewFragment()); + +<#if !webview> + startFirstFragment(new MainFragment()); + } @Override protected void onDestroy() { super.onDestroy(); } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == Consant.REQUESTCODE_FROM_FRAGMENT) { - Toast.makeText(getApplicationContext(), "选中了个文件", Toast.LENGTH_SHORT).show(); - }else { - IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); - if (result != null) { - if (result.getContents() == null) { - Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show(); - } else { - Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show(); - } - } else { - super.onActivityResult(requestCode, resultCode, data); - } - } - } } diff --git a/src/main/resources/modules/Android/app/src/main/java/base/activity/QRcodeActivity.java b/src/main/resources/modules/Android/app/src/main/java/base/activity/QRcodeActivity.java index 8ff47b5d..29ec5d31 100644 --- a/src/main/resources/modules/Android/app/src/main/java/base/activity/QRcodeActivity.java +++ b/src/main/resources/modules/Android/app/src/main/java/base/activity/QRcodeActivity.java @@ -1,68 +1,46 @@ package ${domain}.base.activity; import android.app.Activity; +import android.content.Intent; import android.os.Bundle; -import android.os.PersistableBundle; -import android.view.KeyEvent; -import com.journeyapps.barcodescanner.CaptureManager; -import com.journeyapps.barcodescanner.DecoratedBarcodeView; -import ${package}.R; -public class QRcodeActivity extends Activity implements DecoratedBarcodeView.TorchListener { +import com.google.zxing.integration.android.IntentIntegrator; +import com.google.zxing.integration.android.IntentResult; - private CaptureManager captureManager; - private DecoratedBarcodeView mDBV; +public class QRcodeActivity extends Activity { + + public static String QRCODE_RESULT = "qrcode_result"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_qrcode); - - mDBV = (DecoratedBarcodeView) findViewById(R.id.dbv_custom); - mDBV.setTorchListener(this); - - //重要代码,初始化捕获 - captureManager = new CaptureManager(this, mDBV); - captureManager.initializeFromIntent(getIntent(), savedInstanceState); - captureManager.decode(); - } - - @Override - protected void onPause() { - super.onPause(); - captureManager.onPause(); - } - - @Override - protected void onResume() { - super.onResume(); - captureManager.onResume(); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - captureManager.onDestroy(); - } - - @Override - public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { - super.onSaveInstanceState(outState, outPersistentState); - captureManager.onSaveInstanceState(outState); - } - - @Override - public boolean onKeyDown(int keyCode, KeyEvent event) { - return mDBV.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event); - } - - @Override - public void onTorchOn() { - - } - - @Override - public void onTorchOff() { + new IntentIntegrator(this) + // 自定义Activity,重点是这行---------------------------- + .setCaptureActivity(QRcodeScanActivity.class) + .setDesiredBarcodeFormats(IntentIntegrator.QR_CODE)// 扫码的类型,可选:一维码,二维码,一/二维码 + .setPrompt("请对准二维码")// 设置提示语 + .setCameraId(0)// 选择摄像头,可使用前置或者后置 + .setBeepEnabled(true)// 是否开启声音,扫完码之后会"哔"的一声 + .setBarcodeImageEnabled(true)// 扫完码之后生成二维码的图片 + .initiateScan();// 初始化扫码 + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); + if (result != null) { + if (result.getContents() == null) { + + } else { + Intent intent = new Intent(); + intent.putExtra(QRCODE_RESULT, result.getContents()); + setResult(RESULT_OK, intent); + finish(); + } + } else { + setResult(RESULT_CANCELED); + finish(); + } } } diff --git a/src/main/resources/modules/Android/app/src/main/java/base/activity/QRcodeScanActivity.java b/src/main/resources/modules/Android/app/src/main/java/base/activity/QRcodeScanActivity.java new file mode 100644 index 00000000..5ade0cca --- /dev/null +++ b/src/main/resources/modules/Android/app/src/main/java/base/activity/QRcodeScanActivity.java @@ -0,0 +1,69 @@ +package ${domain}.base.activity; + +import android.app.Activity; +import android.os.Bundle; +import android.os.PersistableBundle; +import android.view.KeyEvent; + +import ${domain}.android.R; +import com.journeyapps.barcodescanner.CaptureManager; +import com.journeyapps.barcodescanner.DecoratedBarcodeView; + +public class QRcodeScanActivity extends Activity implements DecoratedBarcodeView.TorchListener { + + private CaptureManager captureManager; + private DecoratedBarcodeView mDBV; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_qrcode_scan); + + mDBV = (DecoratedBarcodeView) findViewById(R.id.dbv_custom); + mDBV.setTorchListener(this); + + //重要代码,初始化捕获 + captureManager = new CaptureManager(this, mDBV); + captureManager.initializeFromIntent(getIntent(), savedInstanceState); + captureManager.decode(); + } + + @Override + protected void onPause() { + super.onPause(); + captureManager.onPause(); + } + + @Override + protected void onResume() { + super.onResume(); + captureManager.onResume(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + captureManager.onDestroy(); + } + + @Override + public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { + super.onSaveInstanceState(outState, outPersistentState); + captureManager.onSaveInstanceState(outState); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + return mDBV.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event); + } + + @Override + public void onTorchOn() { + + } + + @Override + public void onTorchOff() { + + } +} diff --git a/src/main/resources/modules/Android/app/src/main/java/fragment/WebViewFragment.java b/src/main/resources/modules/Android/app/src/main/java/fragment/WebViewFragment.java index 9a87128a..3017a2a6 100644 --- a/src/main/resources/modules/Android/app/src/main/java/fragment/WebViewFragment.java +++ b/src/main/resources/modules/Android/app/src/main/java/fragment/WebViewFragment.java @@ -33,7 +33,7 @@ public class WebViewFragment extends BaseSPAFragment { @Override protected void onViewInit() { - initWebView("http://192.168.1.103:8080/wap/index#/"); + initWebView("http://127.0.0.1:8080/"); } private void initWebView(final String url) { diff --git a/src/main/resources/modules/Android/app/src/main/res/layout/activity_qrcode.xml b/src/main/resources/modules/Android/app/src/main/res/layout/activity_qrcode_scan.xml similarity index 100% rename from src/main/resources/modules/Android/app/src/main/res/layout/activity_qrcode.xml rename to src/main/resources/modules/Android/app/src/main/res/layout/activity_qrcode_scan.xml