Browse Source

onstop关闭摄像头

liuyuqi-dellpc 5 years ago
parent
commit
a1d46a4369

+ 1 - 0
.gitignore

@@ -15,3 +15,4 @@
 /build
 /captures
 .externalNativeBuild
+/.idea

+ 0 - 3
.idea/dictionaries/liuyuqi.xml

@@ -1,3 +0,0 @@
-<component name="ProjectDictionaryState">
-  <dictionary name="liuyuqi" />
-</component>

+ 0 - 6
.idea/encodings.xml

@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8" addBOMForNewFiles="with NO BOM">
-    <file url="PROJECT" charset="UTF-8" />
-  </component>
-</project>

+ 0 - 15
.idea/gradle.xml

@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="GradleSettings">
-    <option name="linkedExternalProjectsSettings">
-      <GradleProjectSettings>
-        <compositeConfiguration>
-          <compositeBuild compositeDefinitionSource="SCRIPT" />
-        </compositeConfiguration>
-        <option name="distributionType" value="DEFAULT_WRAPPED" />
-        <option name="externalProjectPath" value="$PROJECT_DIR$" />
-        <option name="resolveModulePerSourceSet" value="false" />
-      </GradleProjectSettings>
-    </option>
-  </component>
-</project>

+ 0 - 17
.idea/misc.xml

@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="CMakeSettings">
-    <configurations>
-      <configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
-    </configurations>
-  </component>
-  <component name="Kotlin2JsCompilerArguments">
-    <option name="sourceMapEmbedSources" />
-  </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="JDK" project-jdk-type="JavaSDK">
-    <output url="file://$PROJECT_DIR$/build/classes" />
-  </component>
-  <component name="ProjectType">
-    <option name="id" value="Android" />
-  </component>
-</project>

+ 0 - 12
.idea/runConfigurations.xml

@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="RunConfigurationProducerService">
-    <option name="ignoredProducers">
-      <set>
-        <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
-        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
-        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
-      </set>
-    </option>
-  </component>
-</project>

+ 2 - 0
app/build.gradle

@@ -4,6 +4,8 @@ android {
     compileSdkVersion 28
 
     defaultConfig {
+        versionCode 13
+        versionName "1.13"
         applicationId "me.yoqi.qrcode"
         minSdkVersion 14
         targetSdkVersion 28

+ 1 - 3
app/src/main/AndroidManifest.xml

@@ -1,9 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="me.yoqi.qrcode"
-    android:installLocation="auto"
-    android:versionCode="2"
-    android:versionName="1.0.1" >
+    android:installLocation="auto">
 
     <uses-permission android:name="android.permission.CAMERA" />
    <!-- <uses-permission android:name="android.permission.INTERNET" />-->

+ 20 - 6
app/src/main/java/me/yoqi/qrcode/CaptureActivity.java

@@ -38,7 +38,7 @@ import java.util.Collection;
 
 /**
  * 识别二维码 CaptureActivity
- * 
+ *
  * @author liuyuqi
  *
  */
@@ -157,7 +157,22 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
 		super.onPause();
 	}
 
-	@Override
+    @Override
+    protected void onStop() {
+        if (handler != null) {
+            handler.quitSynchronously();
+            handler = null;
+        }
+        cameraManager.closeDriver();
+        if (!hasSurface) {
+            SurfaceView surfaceView = findViewById(R.id.preview_view);
+            SurfaceHolder surfaceHolder = surfaceView.getHolder();
+            surfaceHolder.removeCallback(this);
+        }
+        super.onStop();
+    }
+
+    @Override
 	protected void onDestroy() {
 		inactivityTimer.shutdown();
 		super.onDestroy();
@@ -227,7 +242,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
 	/**
 	 * A valid barcode has been found, so give an indication of success and show
 	 * the results.
-	 * 
+	 *
 	 * @param rawResult
 	 *            The contents of the barcode.
 	 * @param barcode
@@ -251,14 +266,13 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
 		Intent intent = new Intent(this, ResultActivity.class);
 		intent.putExtra("text", text);
 		startActivity(intent);
-//		Toast.makeText(this, "扫描结果:" + text, Toast.LENGTH_LONG).show();
-//		Log.d(TAG, "result-->" + text);
+        cameraManager.closeDriver();
 	}
 
 	/**
 	 * Superimpose a line for 1D or dots for 2D to highlight the key features of
 	 * the barcode.
-	 * 
+	 *
 	 * @param barcode
 	 *            A bitmap of the captured image.
 	 * @param rawResult

+ 44 - 24
app/src/main/java/me/yoqi/qrcode/ResultActivity.java

@@ -1,37 +1,57 @@
 package me.yoqi.qrcode;
 
-import me.yoqi.qrcode.R;
-
 import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.content.ClipData;
 import android.content.ClipboardManager;
 import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
 import android.widget.EditText;
 
+import me.yoqi.qrcode.utils.StringUtils;
+
 public class ResultActivity extends Activity {
 
-	private EditText et_result;
-	ClipboardManager myClipboard;
-
-	@SuppressLint("NewApi")
-	@Override
-	protected void onCreate(Bundle savedInstanceState) {
-		super.onCreate(savedInstanceState);
-		setContentView(R.layout.activity_result);
-		initView();
-		Intent intent = getIntent();
-		String text = intent.getStringExtra("text");
-		et_result.setText(text);
-		
-		myClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
-		
-		ClipData myClip = ClipData.newPlainText("text", text);
-		myClipboard.setPrimaryClip(myClip);
-	}
-
-	private void initView() {
-		et_result = (EditText) findViewById(R.id.et_result);
-	}
+    private EditText et_result;
+    private Button btn_url;
+    ClipboardManager myClipboard;
+    String text;
+
+    @SuppressLint("NewApi")
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_result);
+        initView();
+        Intent intent = getIntent();
+        text = intent.getStringExtra("text");
+        et_result.setText(text);
+        if (StringUtils.isHttpUrl(text)) {
+            btn_url.setVisibility(View.VISIBLE);
+        } else {
+            btn_url.setVisibility(View.GONE);
+        }
+
+        myClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
+
+        ClipData myClip = ClipData.newPlainText("text", text);
+        myClipboard.setPrimaryClip(myClip);
+    }
+
+    private void initView() {
+        et_result = (EditText) findViewById(R.id.et_result);
+        btn_url = (Button) findViewById(R.id.btn_url);
+        btn_url.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                Intent intent = new Intent();
+                intent.setData(Uri.parse(text));//Url 就是你要打开的网址
+                intent.setAction(Intent.ACTION_VIEW);
+                startActivity(intent); //启动浏览器
+            }
+        });
+    }
 }

+ 30 - 0
app/src/main/java/me/yoqi/qrcode/utils/StringUtils.java

@@ -0,0 +1,30 @@
+package me.yoqi.qrcode.utils;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class StringUtils {
+
+    /**
+     * 判断字符串是否为网址
+     *
+     * @param urls 链接字符串
+     * @return
+     */
+    public static boolean isHttpUrl(String urls) {
+        boolean isurl = false;
+        if (urls.startsWith("http://") || urls.startsWith("https://")){
+            return true;
+        }
+        String regex = "(((https|http)?://)?([a-z0-9]+[.])|(www.))"
+                + "\\w+[.|\\/]([a-z0-9]{0,})?[[.]([a-z0-9]{0,})]+((/[\\S&&[^,;\u4E00-\u9FA5]]+)+)?([.][a-z0-9]{0,}+|/?)";//设置正则表达式
+
+        Pattern pat = Pattern.compile(regex.trim());//比对
+        Matcher mat = pat.matcher(urls.trim());
+        isurl = mat.matches();//判断是否匹配
+        if (isurl) {
+            isurl = true;
+        }
+        return isurl;
+    }
+}

+ 13 - 2
app/src/main/res/layout/activity_result.xml

@@ -9,6 +9,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginBottom="10dp"
+        android:textSize="20dp"
         android:text="@string/scan_result" />
 
     <EditText
@@ -16,11 +17,21 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginBottom="10dp"
-        android:lines="5" />
+        android:minLines="5" />
+
+    <Button
+        android:id="@+id/btn_url"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/qrcode_open"
+        android:visibility="gone" />
 
     <TextView
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:text="@string/auto_copy" />
+        android:paddingTop="10dp"
+        android:gravity="center"
+        android:text="@string/auto_copy"
+        android:textSize="17sp" />
 
 </LinearLayout>

+ 0 - 0
gradlew