AndroidPDA扫描⼴播接搜条码并使⽤
在开发扫描扫码接收⼴播条码的时候,由于⼚商如shit般的⽂档和对Anroid基础知识的缺失,⾛了⼀些弯路,以下是⼴播接收条码并使⽤的代码实现 :
1 : 动态注册⼴播
PDA扫描对扫码有强⼤⽀持,在原⽣⾃带的扫描服务中可以配置多种扫描模式,⼴播传递扫码结果是相对先进的。
⾸先 PAD 扫描在扫码解析后是会⾃动发送⼴播的,注册解析扫码结果的⼴播后,可以在⼴播类中直接获取。
再项⽬开发环境中,相应业务代码是写在Activity中的,⽬前的需求是按下扫码按键,接收⼴播数据并在Activity中进⾏相关业务实现。
安卓intent用法在开发者模式与AndroidStudio进⾏调试连接后按键按键AndroidStudio的运⾏⽇志会⾃动打印按键的KeyCode:
D/MultiTapKeyListener: keyCode=139 mInputMode=0
最开始的想法是这么写 :
if (keyCode == 139 && Action() == KeyEvent.ACTION_DOWN) {
接收数据启动业务线程
}
对扫码按键进⾏监听,按下后系统发送⼴播,⼴播接收器接收到扫描数据存放在静态变量中,然后在Activity中进⾏获取。
然⽽⼴播发送接收和Activity代码执⾏时异步的,Activity中获取的扫码结果为null,⽽⼴播接收器则可以接收数据。
2 : 使⽤接⼝回调
package he3.sd.adapter;
t.BroadcastReceiver;
t.Context;
t.Intent;
import android.util.Log;
import android.widget.EditText;
import android.widget.Toast;
import he3.sd.util.Base;
import he3.sd.util.Utility;
/**
* Created by asd25 on 2018/7/20 0020.
*/
public class ScanCodeBroadcastReceiver extends BroadcastReceiver {
private EditText editText;
private OnReceiveCode onReceive;
private String TAG = "ONR";
@Override
public void onReceive (Context context, Intent intent){
Base.barCode = StringExtra("Scan_context");
editText.setText(Base.barCode);
Base.op = BarCodeType(Base.barCode);
editText.clearFocus();
editText.setText("");
}
interface OnReceiveCode{
void notifynThread(String Code);
}
public void setOnReceive(OnReceiveCode onReceive,EditText editText) {
this.editText = editText;
}
}
在⼴播接收器中定义接⼝,和初始化接⼝的⽅法。
整体逻辑为: 启动拥有扫码模块的Activity之后会⾃动动态注册扫码⼴播,接着在⼴播类中定义回调接⼝,在接收模块实现⽅法,就可以在收到条码后执⾏业务代码。
在 Activity 中动态注册⼴播接收器,实现⼴播接收器定义的接⼝ :
public class ScanOperationAdapterPage extends AppCompatActivity implements View.OnClickListener,ScanCodeBroadcastReceiver.OnReceiveCode{ ScanCodeBroadcastReceiver setOnReceive;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_adapterlayout);
userInfo = gson.UserInfo(ScanOperationAdapterPage.this), User.class);
initView();
initActionBar();
initEvents();
dataReset();
initBroadcastReceiver();
/注册⼴播接收器
}
private void initBroadcastReceiver() {
setOnReceive = new ScanCodeBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.android.scanservice.scancontext");
registerReceiver(setOnReceive,intentFilter);
setOnReceive.setOnReceive(this,IP);
}
@Override
public void notifynThread(String Code) {
Thread scanBarCodeThread = new Thread(new scanBarCodeServer()); scanBarCodeThread.start();
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论