diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index ae61112..1c940f8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -54,6 +54,6 @@ dependencies { implementation 'com.tonystark.android:socket:4.1.0' //如果您需要使用 OkSocketServer 功能在客户端或者Java程序,您还需要依赖下面的Server插件包和上面的一起依赖. implementation 'com.tonystark.android:socket-server:4.1.0' - + implementation 'com.lzy.net:okgo:3.0.4' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 824eb4d..45a8b4e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,9 @@ - - + + + + android:name=".ShuangqianActivity" + android:exported="true"> + + - - - - + + + + + --> + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/writeepc/ShuangqianActivity.java b/app/src/main/java/com/example/writeepc/ShuangqianActivity.java new file mode 100644 index 0000000..57df46c --- /dev/null +++ b/app/src/main/java/com/example/writeepc/ShuangqianActivity.java @@ -0,0 +1,187 @@ +package com.example.writeepc; + +import android.content.IntentFilter; +import android.os.Bundle; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.widget.Toast; + +import androidx.databinding.DataBindingUtil; + +import com.example.writeepc.base.BaseActivity; +import com.example.writeepc.broadcast.MyScannerCall; +import com.example.writeepc.broadcast.MyScannerReceiver; +import com.example.writeepc.databinding.ActivityShuangqianBinding; +import com.lzy.okgo.OkGo; +import com.lzy.okgo.callback.StringCallback; +import com.lzy.okgo.model.Response; +import com.lzy.okgo.request.base.Request; + +import okhttp3.MediaType; + +public class ShuangqianActivity extends BaseActivity implements MyScannerCall { + public MediaType mediaType = MediaType.parse("text/xml; charset=utf-8"); + private ActivityShuangqianBinding binding; + private MyScannerReceiver myReceiver; + private long exitTime = 0L; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + binding = DataBindingUtil.setContentView(this, R.layout.activity_shuangqian); + initUHFRManager(); + initDialog(); + + myReceiver = new MyScannerReceiver(this); + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction("com.rfid.SCAN"); + registerReceiver(myReceiver, intentFilter); + + + } + + // 读取 + public void readRFID(View view) { + readEPC(12); + } + + @Override + protected void readTidReault(boolean readState, String result, byte[] rdata) { + super.readTidReault(readState, result, rdata); + + binding.socketEpc.setText(result); + + } + + // 清空数据 + public void clearView(View view) { + binding.socketBarcode.setText(null); + binding.socketEpc.setText(null); + } + + // 提交数据 + public void submit(View view) { + String epc = binding.socketEpc.getText().toString(); + String code = binding.socketBarcode.getText().toString(); + + if (epc.isEmpty() || code.isEmpty()) return; + callWebService(buildSoapRequest(epc, code)); + + } + + // MES确认 + public void mesCormf(View view) { + String epc = binding.socketEpc.getText().toString(); + if (epc.isEmpty()) return; + callWebService(buildSelectRequest(epc)); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == 4) { + if ((System.currentTimeMillis() - exitTime) > 2000) { + Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); + exitTime = System.currentTimeMillis(); + return true; + } else { + finish(); + } + } + return false; + } + + private void callWebService(String soapRequest) { + // 发送 POST 请求 + OkGo.post("http://10.135.55.206:99/WebService.asmx") + .headers("Content-Type", "text/xml; charset=utf-8") + .upString(soapRequest, mediaType) + .execute(new StringCallback() { + @Override + public void onStart(Request request) { + super.onStart(request); + dialog.show(); + } + + @Override + public void onSuccess(Response response) { + // 处理响应结果 + String result = response.body(); + Log.e("TAG", "onSuccess:" + result); + + String str = ""; + int faultstringIndex = result.indexOf(str); + if (faultstringIndex > -1) { + String faultstring = result.substring(faultstringIndex + str.length(), result.indexOf("")); + tipsDialog.setTip(false, faultstring); + tipsDialog.show(); + return; + } + int codeIndex = result.indexOf(""); + if (codeIndex > -1) { + String resultCode = result.substring(codeIndex + 6, result.indexOf("")); + String resultMsg = result.substring(result.indexOf("") + 5, result.indexOf("")); + tipsDialog.setTip(resultCode.equals("200"), resultMsg); + tipsDialog.show(); + } + + + + + } + + @Override + public void onError(Response response) { + + } + + @Override + public void onFinish() { + super.onFinish(); + dialog.dismiss(); + } + }); + } + + // 创建提交信息 + private String buildSoapRequest(String epcid, String barcode) { + StringBuilder soapRequest = new StringBuilder(); + soapRequest.append(""); + soapRequest.append(""); + soapRequest.append(""); + soapRequest.append(""); + soapRequest.append("").append(epcid).append(""); + soapRequest.append("").append(barcode).append(""); + soapRequest.append(""); + soapRequest.append(""); + soapRequest.append(""); + return soapRequest.toString(); + } + + // 创建验证信息 + private String buildSelectRequest(String epcid) { + StringBuilder soapRequest = new StringBuilder(); + soapRequest.append(""); + soapRequest.append(""); + soapRequest.append(""); + soapRequest.append(""); + soapRequest.append("").append(epcid).append(""); + soapRequest.append(""); + soapRequest.append(""); + soapRequest.append(""); + return soapRequest.toString(); + } + + + @Override + public void getScannerData(String data) { + binding.socketBarcode.setText(data); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + unregisterReceiver(myReceiver); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/writeepc/SocketActivity.java b/app/src/main/java/com/example/writeepc/SocketActivity.java index 5fd4455..aae95b8 100644 --- a/app/src/main/java/com/example/writeepc/SocketActivity.java +++ b/app/src/main/java/com/example/writeepc/SocketActivity.java @@ -1,5 +1,6 @@ package com.example.writeepc; +import android.annotation.SuppressLint; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -12,7 +13,6 @@ import android.widget.Toast; import androidx.appcompat.app.AlertDialog; import androidx.databinding.DataBindingUtil; -import androidx.databinding.Observable; import androidx.databinding.ObservableArrayList; import com.example.writeepc.base.BaseActivity; @@ -32,8 +32,8 @@ public class SocketActivity extends BaseActivity { private ActivitySocketBinding binding; private View view; private IConnectionManager manager; - private ObservableArrayList data; private Handler handler = new Handler() { + @Override public void handleMessage(Message msg) { super.handleMessage(msg); @@ -47,6 +47,10 @@ public class SocketActivity extends BaseActivity { String errorInfo = msg.getData().getString("data"); Snackbar.make(view, "连接失败,原因是" + errorInfo, Snackbar.LENGTH_LONG).show(); break; + + case 3: + + break; } } }; @@ -76,9 +80,9 @@ public class SocketActivity extends BaseActivity { startscoket(); } } - + //显示输入弹窗 private void showDialog() { - if (manager!=null && manager.isConnect()){ + if (manager != null && manager.isConnect()) { manager.disconnect(); } EditText editText = new EditText(this); @@ -95,6 +99,7 @@ public class SocketActivity extends BaseActivity { }).create().show(); } + // RFID返回结果 @Override protected void readTidReault(boolean readState, String result, byte[] rdata) { super.readTidReault(readState, result, rdata); @@ -102,19 +107,20 @@ public class SocketActivity extends BaseActivity { manager.send(new TestSendData(result)); } + // 连接服务端 private void startscoket() { String IP = SharedPreferencesUtils.getstring("ip", ""); try { String[] split = IP.split(":"); ConnectionInfo info = new ConnectionInfo(split[0], Integer.parseInt(split[1])); manager = OkSocket.open(info); - }catch (ArrayIndexOutOfBoundsException e){ + } catch (ArrayIndexOutOfBoundsException e) { Toast.makeText(this, "IP和端口号异常", Toast.LENGTH_SHORT).show(); showDialog(); return; } - + // 连接回调 manager.registerReceiver(new SocketActionAdapter() { @Override public void onSocketConnectionSuccess(ConnectionInfo info, String action) { @@ -129,14 +135,15 @@ public class SocketActivity extends BaseActivity { super.onSocketReadResponse(info, action, data); } - + // 发送状态 @Override public void onSocketWriteResponse(ConnectionInfo info, String action, ISendable data) { Log.e("TAG", "客户端发送数据回调"); super.onSocketWriteResponse(info, action, data); - Snackbar.make(view, "数据发送成功:"+new String(data.parse()), Snackbar.LENGTH_LONG).show(); + Snackbar.make(view, "数据发送成功:" + new String(data.parse()), Snackbar.LENGTH_LONG).show(); + // Toast.makeText(SocketActivity.this, new String(data.parse()), Toast.LENGTH_SHORT).show(); } - + //连接回调 @Override public void onSocketConnectionFailed(ConnectionInfo info, String action, Exception e) { super.onSocketConnectionFailed(info, action, e); @@ -152,11 +159,11 @@ public class SocketActivity extends BaseActivity { handler.sendMessage(msg); Looper.loop(); } - + // 断开事件 @Override public void onSocketDisconnection(ConnectionInfo info, String action, Exception e) { super.onSocketDisconnection(info, action, e); - //断开连接 + // 断开连接 Snackbar.make(view, "断开服务器连接,等待自动重连中....", Snackbar.LENGTH_LONG).show(); } @@ -164,6 +171,13 @@ public class SocketActivity extends BaseActivity { manager.connect(); } + @Override + protected void onDestroy() { + super.onDestroy(); + manager.disconnect(); + handler = null; + } + // 发送实体 public class TestSendData implements ISendable { private String str = ""; @@ -183,11 +197,4 @@ public class SocketActivity extends BaseActivity { return body; } } - - @Override - protected void onDestroy() { - super.onDestroy(); - manager.disconnect(); - handler=null; - } } \ No newline at end of file diff --git a/app/src/main/java/com/example/writeepc/base/BaseActivity.java b/app/src/main/java/com/example/writeepc/base/BaseActivity.java index 3f72674..9de20ee 100644 --- a/app/src/main/java/com/example/writeepc/base/BaseActivity.java +++ b/app/src/main/java/com/example/writeepc/base/BaseActivity.java @@ -1,13 +1,16 @@ package com.example.writeepc.base; +import android.app.ProgressDialog; import android.media.MediaPlayer; import android.os.Bundle; import android.util.Log; +import android.view.Window; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import com.example.writeepc.dialog.TipsDialog; import com.handheld.uhfr.UHFRManager; import com.uhf.api.cls.Reader; @@ -18,16 +21,28 @@ public class BaseActivity extends AppCompatActivity { public byte[] accesspwd; public short timeOut = 2000; public MediaPlayer music; + public ProgressDialog dialog; + public TipsDialog tipsDialog; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + tipsDialog=new TipsDialog(this); + } + + + public void initDialog() { + dialog = new ProgressDialog(this); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setCanceledOnTouchOutside(false); + dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); + dialog.setMessage("请求接口中..."); } public void initUHFRManager() { uhfrManager = UHFRManager.getInstance(); uhfrManager.setGen2session(false); - uhfrManager.setPower(22,22); + uhfrManager.setPower(30, 30); accesspwd = Tools.HexString2Bytes("00000000"); music = MediaPlayer.create(this, com.example.writeepc.R.raw.msg); // int[] power = uhfrManager.getPower(); @@ -43,21 +58,22 @@ public class BaseActivity extends AppCompatActivity { Log.e("TAG", "readTid:" + readerErr.name()); if (readerErr == Reader.READER_ERR.MT_OK_ERR) { music.start(); - readTidReault(true, Tools.Bytes2HexString(rdata, 12),rdata); + readTidReault(true, Tools.Bytes2HexString(rdata, 12), rdata); } else { Toast.makeText(this, "读取失败", Toast.LENGTH_SHORT).show(); readTidReault(false, null, null); } } - // 1- 读取EPC + + // 1- 读取EPC public void readEPC(int lenth) { byte[] rdata = new byte[lenth]; - Reader.READER_ERR readerErr = uhfrManager.getTagData(1, 2, lenth/2, rdata, accesspwd, timeOut); + Reader.READER_ERR readerErr = uhfrManager.getTagData(1, 2, lenth / 2, rdata, accesspwd, timeOut); Log.e("TAG", "readTid:" + readerErr.name()); if (readerErr == Reader.READER_ERR.MT_OK_ERR) { music.start(); - readTidReault(true, Tools.Bytes2HexString(rdata, lenth),rdata); + readTidReault(true, Tools.Bytes2HexString(rdata, lenth), rdata); } else { Toast.makeText(this, "读取失败", Toast.LENGTH_SHORT).show(); readTidReault(false, null, null); @@ -65,16 +81,16 @@ public class BaseActivity extends AppCompatActivity { } - protected void readTidReault(boolean readState, String result,byte[] rdata) { + protected void readTidReault(boolean readState, String result, byte[] rdata) { } @Override protected void onDestroy() { super.onDestroy(); - if (uhfrManager!=null){ + if (uhfrManager != null) { uhfrManager.close(); - uhfrManager=null; + uhfrManager = null; } } diff --git a/app/src/main/java/com/example/writeepc/base/MyApplication.java b/app/src/main/java/com/example/writeepc/base/MyApplication.java index 6a181ef..4e71a3a 100644 --- a/app/src/main/java/com/example/writeepc/base/MyApplication.java +++ b/app/src/main/java/com/example/writeepc/base/MyApplication.java @@ -3,6 +3,19 @@ package com.example.writeepc.base; import android.app.Application; import com.example.writeepc.utils.SharedPreferencesUtils; +import com.lzy.okgo.OkGo; +import com.lzy.okgo.cache.CacheEntity; +import com.lzy.okgo.cache.CacheMode; +import com.lzy.okgo.cookie.CookieJarImpl; +import com.lzy.okgo.cookie.store.MemoryCookieStore; +import com.lzy.okgo.https.HttpsUtils; +import com.lzy.okgo.interceptor.HttpLoggingInterceptor; +import com.lzy.okgo.model.HttpHeaders; + +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; + +import okhttp3.OkHttpClient; /** @@ -19,10 +32,33 @@ public class MyApplication extends Application { super.onCreate(); application = this; SharedPreferencesUtils.init(getApplicationContext(), "myapp"); + okGoBase(); + } + + // OKGO 初始化 + private void okGoBase() { + HttpHeaders headers = new HttpHeaders(); + headers.put("Content-Type", "text/xml; charset=utf-8"); + // headers.put("SOAPAction", "http://tempuri.org/RFID_BarcodBind"); + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor("OkGo"); + loggingInterceptor.setPrintLevel(HttpLoggingInterceptor.Level.BODY); // log打印级别,决定了log显示的详细程度 + loggingInterceptor.setColorLevel(Level.SEVERE); // log颜色级别,决定了log在控制台显示的颜色 + HttpsUtils.SSLParams sslParams1 = HttpsUtils.getSslSocketFactory(); // 方法一:信任所有证书,不安全有风险 + builder.sslSocketFactory(sslParams1.sSLSocketFactory, sslParams1.trustManager); + builder.addInterceptor(loggingInterceptor); + builder.readTimeout(6000, TimeUnit.MILLISECONDS); // 全局的读取超时时间 + builder.writeTimeout(6000, TimeUnit.MILLISECONDS); // 全局的写入超时时间 + builder.connectTimeout(6000, TimeUnit.MILLISECONDS); // 全局的连接超时时间 + builder.cookieJar(new CookieJarImpl(new MemoryCookieStore())); // 使用内存保持cookie,app退出后,cookie消失 + OkGo.getInstance().init(this).setOkHttpClient(builder.build()) // 建议设置OkHttpClient,不设置将使用默认的 + .setCacheMode(CacheMode.NO_CACHE) // 全局统一缓存模式,默认不使用缓存,可以不传 + .setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE) // 全局统一缓存时间,默认永不过期,可以不传 + .setRetryCount(0) + .addCommonHeaders(headers); + } - - } diff --git a/app/src/main/java/com/example/writeepc/broadcast/MyScannerCall.java b/app/src/main/java/com/example/writeepc/broadcast/MyScannerCall.java new file mode 100644 index 0000000..82607ce --- /dev/null +++ b/app/src/main/java/com/example/writeepc/broadcast/MyScannerCall.java @@ -0,0 +1,5 @@ +package com.example.writeepc.broadcast; + +public interface MyScannerCall { + void getScannerData(String data); +} diff --git a/app/src/main/java/com/example/writeepc/broadcast/MyScannerReceiver.java b/app/src/main/java/com/example/writeepc/broadcast/MyScannerReceiver.java new file mode 100644 index 0000000..d4c2fe6 --- /dev/null +++ b/app/src/main/java/com/example/writeepc/broadcast/MyScannerReceiver.java @@ -0,0 +1,20 @@ +package com.example.writeepc.broadcast; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class MyScannerReceiver extends BroadcastReceiver { + private MyScannerCall myScannerCall; + + public MyScannerReceiver(MyScannerCall myScannerCall) { + this.myScannerCall = myScannerCall; + } + + @Override + public void onReceive(Context context, Intent intent) { + + String data = intent.getStringExtra("scannerdata"); + myScannerCall.getScannerData(data); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/writeepc/dialog/TipsDialog.java b/app/src/main/java/com/example/writeepc/dialog/TipsDialog.java new file mode 100644 index 0000000..444f4ae --- /dev/null +++ b/app/src/main/java/com/example/writeepc/dialog/TipsDialog.java @@ -0,0 +1,63 @@ +package com.example.writeepc.dialog; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.example.writeepc.R; + + +/** + * Created by wangh on 2020/10/10-14:57。 + */ +public class TipsDialog extends Dialog implements View.OnClickListener { + public String tip; + public TextView textView,button; + private ImageView imageView; + private boolean imageState=true; + public TipsDialog(@NonNull Context context) { + super(context, R.style.MyMiddleDialogStyle); + } + + public void setTip(String tip) { + this.tip = tip; + } + + public void setTip(boolean imageState , String tip) { + this.imageState = imageState; + this.tip = tip; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_tip); +// imageState=false; + imageView=findViewById(R.id.tip_image); + textView=findViewById(R.id.tip_tip); + button=findViewById(R.id.dialog_no); + button.setOnClickListener(this); + } + + @Override + public void show() { + super.show(); + textView.setText(tip); + if (imageState){ + imageView.setImageResource(R.mipmap.chenggong); + }else { + imageView.setImageResource(R.mipmap.icon_jinggao); + } + imageState=false; + } + + @Override + public void onClick(View view) { + dismiss(); + } +} diff --git a/app/src/main/res/drawable/bg_tipdialog.xml b/app/src/main/res/drawable/bg_tipdialog.xml new file mode 100644 index 0000000..fa2a62a --- /dev/null +++ b/app/src/main/res/drawable/bg_tipdialog.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_shuangqian.xml b/app/src/main/res/layout/activity_shuangqian.xml new file mode 100644 index 0000000..c3b7bdb --- /dev/null +++ b/app/src/main/res/layout/activity_shuangqian.xml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +