BluetoothModule.java 8 KB
package com.metroapp.nativemodules;

import android.Manifest;
import android.annotation.TargetApi;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.bluetooth.le.BluetoothLeScanner;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.widget.Toast;

import com.alibaba.fastjson.JSON;
import com.alibaba.sdk.android.oss.ClientException;
import com.alibaba.sdk.android.oss.OSS;
import com.alibaba.sdk.android.oss.OSSClient;
import com.alibaba.sdk.android.oss.ServiceException;
import com.alibaba.sdk.android.oss.callback.OSSCompletedCallback;
import com.alibaba.sdk.android.oss.common.auth.OSSCredentialProvider;
import com.alibaba.sdk.android.oss.common.auth.OSSStsTokenCredentialProvider;
import com.alibaba.sdk.android.oss.model.OSSRequest;
import com.alibaba.sdk.android.oss.model.PutObjectRequest;
import com.alibaba.sdk.android.oss.model.PutObjectResult;
import com.elvishew.xlog.XLog;
import com.facebook.react.bridge.LifecycleEventListener;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.metroapp.DeviceUtil;
import com.metroapp.MainActivity;
import com.metroapp.bean.CameraDataBean;
import com.metroapp.camera.CameraActivity;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

import pub.devrel.easypermissions.EasyPermissions;


/**
 * Created by mingming on 26/3/18.
 */

public class BluetoothModule extends ReactContextBaseJavaModule  implements LifecycleEventListener {

    public static  ReactApplicationContext reactContext;
    public BluetoothModule(ReactApplicationContext reactContext) {
        super(reactContext);
        BluetoothModule.reactContext =getReactApplicationContext();
        //在构造函数中注册生命周期事件的监听接口
        reactContext.addLifecycleEventListener(this);
        EventBus.getDefault().register(this);
    }

    @Override
    public String getName() {
        return "BlueToolManage";
    }


    /**
     * 获取三方应用传过来的手机号码
     * @param
     */
    @ReactMethod
    public void getPhoneNumber(Promise promise){
        promise.resolve(MainActivity._this.mobilePhone);
    }

    /**
     * 判断是否是跳转过来的
     * @param
     */
    @ReactMethod
    public void getCurrentStatus(Promise promise){
        promise.resolve(MainActivity._this.isFromOtherApp);
    }



    /**
     * 打印日志
     * @param
     */
    @ReactMethod
    public void printLog(String  message){
        XLog.d(message+"\n");
    }


    /**
     * 开启定时器
     * @param
     */
    @ReactMethod
    public void startTimer(String s){
        MainActivity._this.startTimer(s);
    }

    /**
     * 关闭定时器
     */
    @ReactMethod
    public void stopTimer(){
        MainActivity._this.stopTimer();

    }

    /**
     * 关闭定时器
     */
    @TargetApi(22)
    @ReactMethod
    public void checkAndOpenBle(){
        BluetoothManager bluetoothManager = (BluetoothManager) MainActivity._this
                .getSystemService(Context.BLUETOOTH_SERVICE);//这里与标准蓝牙略有不同
        BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter();
        if (mayRequestLocation()){
            if (!mBluetoothAdapter.isEnabled()) {
                mBluetoothAdapter.enable();
            }
        }
    }

    private boolean mayRequestLocation() {
        if (Build.VERSION.SDK_INT >= 23) {
            String[] perms = {Manifest.permission.ACCESS_COARSE_LOCATION};
            if (EasyPermissions.hasPermissions(MainActivity._this, perms)) {
                return true;
            } else {
                EasyPermissions.requestPermissions(MainActivity._this, "动态请求权限", 0, perms);
                return false;
            }
        }else{
            return true;
        }
    }

    /**
     * 获取当前版本号
     * @param
     */
    @ReactMethod
    public void getAppVersion(Promise promise){
        promise.resolve(DeviceUtil.getVersionName(reactContext));
    }

    //定义原生像rn发送事件的函数
    public  static  void sendEvent( String eventName, @Nullable WritableMap params)
    {
        if (reactContext  == null){
            return;
        }
        reactContext
                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                .emit(eventName,params);
    }

    private Promise mpromise;

    /**
     * 打开拍照/拍摄组件
     * @param promise
     */
    @ReactMethod
    public void  openCameraWithpassportId(String passportId,final Promise promise){
        mpromise = promise;
        Intent intent = new Intent(reactContext, CameraActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra("fromRN",true);
        intent.putExtra("passportId",passportId);
        reactContext.startActivity(intent);
    }

    //eventbus事件处理
    @Subscribe(threadMode = ThreadMode.MAIN) //在ui线程执行
    public void onUpdateResult(CameraDataBean event) {
        if (event !=null){
            String dataJson = JSON.toJSONString(event);
            if (mpromise!=null){
                mpromise.resolve(dataJson);
            }

        }

    }


    /**
     *  简单上传
     *  上传文件第二步--上传到阿里云服务器
     * @param object
     * @param filePath
     */
    @ReactMethod
    public  void simpleUpload(String  keyId,
                              String secret,
                              String token,
                              String endpoint,
                              String mBucket,
                              String object,
                              String filePath,
                              final Promise promise){

        if (object.equals("")) {
            return;
        }
        java.io.File file = new java.io.File(filePath);
        if (!file.exists()) {
            Toast.makeText(reactContext,"获取文件路径出错",Toast.LENGTH_SHORT).show();
            return;
        }
        if (object.startsWith("/")){
           object  =  object.substring(1);
        }
        // 构造上传请求
        PutObjectRequest put = new PutObjectRequest(mBucket, object, filePath);
        put.setCRC64(OSSRequest.CRC64Config.YES);
        OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(keyId, secret, token);
        final OSS mOss = new OSSClient(reactContext, endpoint, credentialProvider);
        mOss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
            @Override
            public void onSuccess(PutObjectRequest request, PutObjectResult result) {

                final  String url =   mOss.presignPublicObjectURL(request.getBucketName(), request.getObjectKey());
                promise.resolve(url);
            }

            @Override
            public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
                // 请求异常
                if (clientExcepion != null) {//本地异常如网络异常等
                    Toast.makeText(reactContext,clientExcepion.toString(),Toast.LENGTH_SHORT).show();
                }
                if (serviceException != null) { // 服务异常
                    Toast.makeText(reactContext,serviceException.toString(),Toast.LENGTH_SHORT).show();
                }
            }
        });
    }


    /***注册生命周期 开始*****/
    @Override
    public void onHostResume() {

    }

    @Override
    public void onHostPause() {

    }

    @Override
    public void onHostDestroy() {
        EventBus.getDefault().unregister(this);
    }
    /***注册生命周期 结束*****/
}