android 使用zxinglib實現掃描二維碼功能

  1. 首先我們需要下載最新版本的 ,非常感謝 xuyisheng的封裝。
  2. 下載完畢後,我們在Android中需要導入的Module是libzxing
  3. 導入到我們的工程中

    找到我們下載後的工程,然後選擇,ModuleName名字不要改,如下:

    導入後,就成了下面這樣了,如下:

    接下來我們需要給app添加依賴,如下:


    接下來我們需要給app添加依賴,如下:

    打開app目錄下的src下面的AndroidMainifest.xml,添加權限:
	<uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

MainActivity的代碼如下:

package com.example.myapplication;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.huawei.anyoffice.sdk.SDKContext;
import com.huawei.anyoffice.sdk.SDKContextOption;
import com.huawei.anyoffice.sdk.log.Log;
import com.huawei.anyoffice.sdk.login.LoginAgent;
import com.huawei.anyoffice.sdk.login.LoginParam;
import com.huawei.anyoffice.sdk.network.NetChangeCallback;
import com.huawei.anyoffice.sdk.network.NetStatusManager;
import com.xys.libzxing.zxing.activity.CaptureActivity;

import org.json.JSONObject;

import java.io.File;
import java.net.InetSocketAddress;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class MainActivity extends FragmentActivity {

    private Button btn;

    private TextView tv;

    private WebView view;

    private String user;

    private String result;

    //工程對應tag標識
    private String TAG = "MyApplication";

    private static final int TIME_OUT_PROGRESS = 30;
    private static final int TIME_OUT_MILLIS = 5*1000;

    //隧道狀態回調的處理
    private NetChangeCallback callback = new NetChangeCallback() {
        @Override
        public void onNetChanged(int oldState, int newState, int errorCode) {
            Log.e(TAG, String.format("oldState:%d, newState:%d, errorCode:%d, ", oldState, newState, errorCode));
        }
    };

    //js調用安卓,必須加@JavascriptInterface註釋的方法纔可以被js調用
    @JavascriptInterface
    public String androidMethod() {


        return "{\"fullName\":\"張三\",\"departmentName\":\"科技處\"}";
    }

    // 打開掃描界面掃描條形碼或二維碼
    @JavascriptInterface
    public void openCarema(){
        Intent openCameraIntent = new Intent(MainActivity.this, CaptureActivity.class);
        startActivityForResult(openCameraIntent, 0);
    }

    // 將掃描到的結果返回一下
    @JavascriptInterface
    public String getResult(){
        return result;
    }

    // 獲取掃描結果
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            Bundle bundle = data.getExtras();
            String scanResult = bundle.getString("result");
            this.result = scanResult;
            view.loadUrl("file:///android_asset/"+result);
        }
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        // user = login();
        view = (WebView) findViewById(R.id.view);



        view.clearCache(true);

        view.getSettings().setDomStorageEnabled(true);
        String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
        view.getSettings().setAppCachePath(appCachePath);
        view.getSettings().setAllowFileAccess(true);
        view.getSettings().setAppCacheEnabled(true);

        view.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

        view.getSettings().setJavaScriptEnabled(true);

//        view.loadUrl("file:///android_asset/demo.html");
        view.loadUrl("http://192.168.0.106:9090");

        view.addJavascriptInterface(this, "androidObject");

    }


我寫的這個Demo大家可以下載下來看看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章