初始化框架,完成扫描回调,语音接口

This commit is contained in:
2021-02-08 10:34:29 +08:00
commit 29af9af399
73 changed files with 2275 additions and 0 deletions

View File

@ -0,0 +1,32 @@
package chaoran.business.adapter;
/*
**********************************************
* DATE PERSON REASON
* 2021-02-01 FXY Created
**********************************************
*/
/**
* 适配器基类
* 同一品牌的设备,不论什么型号,用的是同一个适配器
* 设备按品牌区分,而不按具体型号区分
*/
public interface Adapter{
/**
* 开始扫描
*
* @return
*/
public void start();
/**
* 结束扫描
*
* @return
*/
public void stop();
}

View File

@ -0,0 +1,65 @@
package chaoran.business.adapter;
/*
**********************************************
* DATE PERSON REASON
* 2021-02-03 FXY Created
**********************************************
*/
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Vibrator;
import chaoran.business.R;
import chaoran.business.activity.ResultListener;
import chaoran.business.strategy.Strategy;
/**
* 阿尔卑斯适配器
* CR-5W适用
*/
public class AlpsAdapter implements Adapter {
private Context context;
private Strategy strategy;
private ResultListener resultListener;
public AlpsAdapter(Context context, ResultListener resultListener) {
this.context = context;
this.resultListener = resultListener;
strategy = new Receiver();
}
@Override
public void start() {
strategy.executeStrategy(resultListener);
}
@Override
public void stop() {
strategy.exclusiveStrategy();
}
public class Receiver extends BroadcastReceiver implements Strategy {
@Override
public void onReceive(Context context, Intent intent) {
resultListener.result(intent.getStringExtra("BARCODE"));
}
@Override
public void executeStrategy(ResultListener resultListener) {
IntentFilter filter = new IntentFilter();
filter.addAction("com.barcode.sendBroadcast");
context.registerReceiver(this, filter);
}
@Override
public void exclusiveStrategy() {
context.unregisterReceiver(this);
}
}
}

View File

@ -0,0 +1,70 @@
package chaoran.business.adapter;
/*
**********************************************
* DATE PERSON REASON
* 2021-02-02 FXY Created
**********************************************
*/
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import chaoran.business.activity.ResultListener;
import chaoran.business.strategy.Strategy;
import com.android.barcodescandemo.ScannerInerface;
/**
* idata 适配器
*/
public class IDataAdapter implements Adapter {
private Context context;
private ResultListener resultListener;
private Strategy strategy;
public IDataAdapter(Context context, ResultListener resultListener) {
this.context = context;
this.resultListener = resultListener;
strategy = new Receiver();
}
@Override
public void start() {
strategy.executeStrategy(resultListener);
}
@Override
public void stop() {
strategy.exclusiveStrategy();
}
public class Receiver extends BroadcastReceiver implements Strategy {
private ScannerInerface scannerInerface;
public Receiver() {
scannerInerface = new ScannerInerface(context);
scannerInerface.setOutputMode(1);
}
@Override
public void onReceive(Context context, Intent intent) {
resultListener.result(intent.getStringExtra("value"));
}
@Override
public void executeStrategy(ResultListener resultListener) {
scannerInerface.open();
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.SCANRESULT");
context.registerReceiver(this, filter);
}
@Override
public void exclusiveStrategy() {
context.unregisterReceiver(this);
scannerInerface.close();
}
}
}

View File

@ -0,0 +1,118 @@
package chaoran.business.adapter;
/*
**********************************************
* DATE PERSON REASON
* 2021-02-01 FXY Created
**********************************************
*/
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Vibrator;
import chaoran.business.R;
import chaoran.business.activity.ResultListener;
import chaoran.business.strategy.Strategy;
import java.io.*;
/**
* 瑞芯适配器
*/
public class RockChipAdapter implements Adapter {
private Strategy strategy;
private ResultListener resultListener;
private Context context;
@Override
public void start() {
strategy.executeStrategy(resultListener);
}
@Override
public void stop() {
strategy.exclusiveStrategy();
}
public RockChipAdapter(Context context, ResultListener resultListener) {
this.resultListener = resultListener;
this.context = context;
this.strategy = new Reader(new File("/dev/ttyS1"), 115200, 0);
}
public class Reader implements Strategy {
private FileDescriptor mFd;
private FileInputStream mFileInputStream;
private boolean running = true;
public Reader(File device, int baudrate, int flags) {
if (!device.canRead() || !device.canWrite()) {
try {
Process su;
su = Runtime.getRuntime().exec("/system/bin/su");
String cmd = "chmod 777 " + device.getAbsolutePath() + "\n" + "exit\n";
su.getOutputStream().write(cmd.getBytes());
if ((su.waitFor() != 0) || !device.canRead() || !device.canWrite()) {
System.out.println("获取su命令权限失败,系统或许未root");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("获取root权限失败");
}
}
mFd = open(device.getAbsolutePath(), baudrate, flags);
if (mFd == null) {
System.out.println("获取文件描述符失败!");
}
mFileInputStream = new FileInputStream(mFd);
}
@Override
public void executeStrategy(ResultListener resultListener) {
new Thread(() -> {
while (running) {
String data = data();
if (!data.equals("")) {
resultListener.result(data);
}
}
}).start();
}
@Override
public void exclusiveStrategy() {
running = false;
close();
}
private String data() {
if (mFileInputStream == null) return "";
try {
int size = mFileInputStream.available();
byte[] buffer = new byte[size];
size = mFileInputStream.read(buffer);
if (size > 0) {
return new String(buffer);
}
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
}
static {
System.loadLibrary("rockchip");
}
private native static FileDescriptor open(String path, int baudrate, int flags);
public native void close();
}

View File

@ -0,0 +1,44 @@
package chaoran.business.adapter;
/*
**********************************************
* DATE PERSON REASON
* 2021-02-01 FXY Created
**********************************************
*/
import chaoran.business.activity.ResultListener;
import static java.lang.Thread.sleep;
public class TestAdapter implements Adapter {
private ResultListener resultListener;
public TestAdapter(ResultListener resultListener) {
this.resultListener = resultListener;
}
@Override
public void start() {
new Thread(() -> {
int i = 0;
while (i < 10) {
resultListener.result(i + "");
i++;
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
@Override
public void stop() {
}
}

View File

@ -0,0 +1,86 @@
package chaoran.business.adapter;
/*
**********************************************
* DATE PERSON REASON
* 2021-02-01 FXY Created
**********************************************
*/
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.device.ScanManager;
import android.device.scanner.configuration.Triggering;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Vibrator;
import chaoran.business.R;
import chaoran.business.activity.ResultListener;
import chaoran.business.strategy.Strategy;
/**
* 优博讯适配器
*/
public class UroBoAdapter implements Adapter {
private Strategy strategy;
private Context context;
private ResultListener resultListener;
public UroBoAdapter(Context context, ResultListener resultListener) {
this.context = context;
this.resultListener = resultListener;
this.strategy = new Receiver();
}
@Override
public void start() {
strategy.executeStrategy(resultListener);
}
@Override
public void stop() {
strategy.exclusiveStrategy();
}
/**
* 广播接受者
* 自省策略
*/
public class Receiver extends BroadcastReceiver implements Strategy {
private ScanManager mScanManager;
public Receiver() {
mScanManager = new ScanManager();
mScanManager.openScanner();
mScanManager.switchOutputMode(0);
if (mScanManager.getTriggerMode() != Triggering.CONTINUOUS)
mScanManager.setTriggerMode(Triggering.CONTINUOUS);
}
@Override
public void onReceive(Context context, Intent intent) {
String barcode = intent.getStringExtra("barcode_string");
resultListener.result(barcode);
}
@Override
public void executeStrategy(ResultListener resultListener) {
mScanManager.startDecode();
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.ACTION_DECODE_DATA");
context.registerReceiver(this, filter);
}
@Override
public void exclusiveStrategy() {
context.unregisterReceiver(this);
mScanManager.stopDecode();
}
}
}