初始化框架,完成扫描回调,语音接口
This commit is contained in:
32
app/src/main/java/chaoran/business/adapter/Adapter.java
Normal file
32
app/src/main/java/chaoran/business/adapter/Adapter.java
Normal 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();
|
||||
|
||||
}
|
||||
65
app/src/main/java/chaoran/business/adapter/AlpsAdapter.java
Normal file
65
app/src/main/java/chaoran/business/adapter/AlpsAdapter.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
70
app/src/main/java/chaoran/business/adapter/IDataAdapter.java
Normal file
70
app/src/main/java/chaoran/business/adapter/IDataAdapter.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
118
app/src/main/java/chaoran/business/adapter/RockChipAdapter.java
Normal file
118
app/src/main/java/chaoran/business/adapter/RockChipAdapter.java
Normal 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();
|
||||
}
|
||||
44
app/src/main/java/chaoran/business/adapter/TestAdapter.java
Normal file
44
app/src/main/java/chaoran/business/adapter/TestAdapter.java
Normal 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() {
|
||||
|
||||
}
|
||||
}
|
||||
86
app/src/main/java/chaoran/business/adapter/UroBoAdapter.java
Normal file
86
app/src/main/java/chaoran/business/adapter/UroBoAdapter.java
Normal 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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user