package etelligens.com.foodsafety.fragments; import android.Manifest; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.location.*; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.*; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.android.volley.*; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import com.gainscha.sdk2.Printer; import com.gainscha.sdk2.PrinterResponse; import com.google.gson.Gson; import com.printer.sdk.serial.MainActivity; import com.printer.sdk.serial.ScanningActivity; import etelligens.com.foodsafety.R; import etelligens.com.foodsafety.activities.ItemSelection; import etelligens.com.foodsafety.activities.dashboard.SharedHelper; import etelligens.com.foodsafety.activities.lables.frontEnd.ChooseProductCatFrontEnd; import etelligens.com.foodsafety.activities.lables.frontEnd.ChooseProductFrontEnd; import etelligens.com.foodsafety.activities.sidemenu.AddNewUserActivity; import etelligens.com.foodsafety.adapter.*; import etelligens.com.foodsafety.fragments.userslist.PrinterCallback; import etelligens.com.foodsafety.model.*; import etelligens.com.foodsafety.page_qr; import etelligens.com.foodsafety.utils.BaseFragment; import etelligens.com.foodsafety.utils.MyLocation; import etelligens.com.foodsafety.utils.Tools; import etelligens.com.foodsafety.utils.hardwareEncryption; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.*; import static android.content.Context.MODE_PRIVATE; import static androidx.core.content.ContextCompat.getSystemService; import static com.gainscha.sdk2.j.e; import static etelligens.com.foodsafety.utils.EndPoint.*; import static etelligens.com.foodsafety.utils.EndPoint.ETE_GET_ALL_PARTNER; import static etelligens.com.foodsafety.utils.Keyword.*; import static etelligens.com.foodsafety.utils.Keyword.ETE_DATA; /** * @author wj * @Description: 打印机充值 * @create 2024/1/12 11:31 **/ public class PrinterSettingsMileageFrag extends BaseFragment implements View.OnClickListener, PrinterCallback { TextView saveTxt,restMileage; Button restSelect,useRecordsSelect,bindPrinter,rechargeRecords; String edTxt=null; EditText mileageSizeTxt; Integer mileageNumber=null; //打印机加密数据 private byte[] printReturnNumber; String restNumber=null; private byte[] prefixEncryptionAfterMileagebyteMileageEncryption; Button openQrCodeScan,storeBindPrinter; EditText text; SwipeRefreshLayout pullToRefresh; RecyclerView recyclerView; ArrayList mileageModals=new ArrayList<>(); MileageAdapter mileageAdapter; LocationManager mLocationMgr; // 声明一个定位管理器对象 boolean isLocationEnable = false; // 定位服务是否可用 ImageView scannerImage; private ProgressDialog progress = null; RecyclerView productRecyclerview; //打开扫描界面请求码 private int REQUEST_CODE = 0x01; //扫描成功返回码 private int RESULT_OK = 0xA1; private Handler mHandler = new Handler(Looper.myLooper()); // 声明一个处理器对象 private String connectionMac=null; Printer printer=null; String number=null; boolean status=false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } View view; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment view = inflater.inflate(R.layout.fragment_settings_printer_mileage, container, false); //获取当前连接的打印机 if(Printer.getConnectedPrinters() != null && Printer.getConnectedPrinters().size() > 0){ printer = Printer.getConnectedPrinters().get(0); } requirePermission(); //第一个参数为存储的文件名,第二个参数为默认的操作模式 SharedPreferences spf = getActivity().getSharedPreferences("RechargeNumberFile", MODE_PRIVATE); //第一个参数为键的名称,第二个参数为找不到值的时候的默认值 number = spf.getString("rechargeNumber",null); // 获取 SharedPreferences 对象 SharedPreferences sharedPreferences = getActivity().getSharedPreferences("connection_printer_mac", MODE_PRIVATE); // 读取数据,提供默认值以防止读取失败 //connectionMac= sharedPreferences.getString("mac", null); // 读取字符串 if(connectionMac==null) { if (null !=printer){ connectionMac = printer.getPrinterDevice().getPrinterName(); } } mileageSizeTxt = view.findViewById(R.id.mileage_size_txt); restMileage=view.findViewById(R.id.tv_rest_mileage_number); restSelect=view.findViewById(R.id.select_rest_mileage); useRecordsSelect=view.findViewById(R.id.select_printer_use_records); bindPrinter=view.findViewById(R.id.select__user_bind_printer); rechargeRecords=view.findViewById(R.id.select_user_recharge_records); recyclerView =view.findViewById(R.id.consumable_recycleview); pullToRefresh=view.findViewById(R.id.swipe_consumable_use_list); storeBindPrinter=view.findViewById(R.id.store_bind_printer); view.findViewById(R.id.select_rest_mileage).setOnClickListener(this); view.findViewById(R.id.save_txt).setOnClickListener(this); view.findViewById(R.id.scanIcon).setOnClickListener(this); recyclerView.setOnClickListener(this); pullToRefresh.setOnClickListener(this); useRecordsSelect.setOnClickListener(this); bindPrinter.setOnClickListener(this); rechargeRecords.setOnClickListener(this); storeBindPrinter.setOnClickListener(this); return view; } @Override public void onClick(View view) { switch (view.getId()) { case R.id.store_bind_printer:{ //绑定打印机 if (Printer.getConnectedPrinters() == null || Printer.getConnectedPrinters().size() == 0) { // 如果打印机未连接,则启动打印机扫描活动 Intent scanningIntent = new Intent(getContext(), ScanningActivity.class); startActivityForResult(scanningIntent, ScanningActivity.SCANNING_FOR_PRINTER); }else { //获取当前连接的打印机 if(Printer.getConnectedPrinters() != null && Printer.getConnectedPrinters().size() > 0){ printer=Printer.getConnectedPrinters().get(0); } //第一个参数为存储的文件名,第二个参数为默认的操作模式 SharedPreferences spf = getActivity().getSharedPreferences(DB_LOGIN_USER_DATA, Context.MODE_PRIVATE); //第一个参数为键的名称,第二个参数为找不到值的时候的默认值 int outid = spf.getInt("outletID",0); //绑定门店 setBindPrinterAndOutlet(printer.getPrinterDevice().getPrinterName(),connectionMac, String.valueOf(outid)); } break; } case R.id.select_printer_use_records:{ //打印机使用记录 if (Printer.getConnectedPrinters() == null || Printer.getConnectedPrinters().size() == 0) { // 如果打印机未连接,则启动打印机扫描活动 Intent scanningIntent = new Intent(getContext(), ScanningActivity.class); startActivityForResult(scanningIntent, ScanningActivity.SCANNING_FOR_PRINTER); }else { //获取当前连接的打印机 if(Printer.getConnectedPrinters() != null && Printer.getConnectedPrinters().size() > 0){ printer=Printer.getConnectedPrinters().get(0); } } } break; case R.id.select__user_bind_printer: { //用户绑定打印机 ArrayList userBindPrinterModals=new ArrayList<>(); for(int i=0;i<10;i++){ UserBindPrinterModal userBindPrinterModal=new UserBindPrinterModal(); userBindPrinterModal.setPrinterName("打印机"+i); userBindPrinterModal.setStoreID("门店"+i); userBindPrinterModals.add(userBindPrinterModal); } UserBindPrinterModalAdopter userBindPrinterModalAdopter = new UserBindPrinterModalAdopter( getContext(), userBindPrinterModals, userBindPrinterModal -> { } ); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setHasFixedSize(true); recyclerView.setAdapter(userBindPrinterModalAdopter); } break; case R.id.select_user_recharge_records:{ //用户打印机消耗记录 ArrayList userRechargePrinterModals=new ArrayList<>(); for(int i=0;i<12;i++){ UserRechargePrinterModal userRechargePrinterModal=new UserRechargePrinterModal(); userRechargePrinterModal.setPrinterMac("打印机消防"+i); userRechargePrinterModal.setCustomerMileage("打印机消耗"+i); userRechargePrinterModal.setCustomerNumber("12312ijdoiafd"+i); userRechargePrinterModals.add(userRechargePrinterModal); } UserRechargePrinterModalAdopter userRechargePrinterModalAdopter = new UserRechargePrinterModalAdopter( getContext(), userRechargePrinterModals, userRechargePrinterModal -> { } ); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setHasFixedSize(true); recyclerView.setAdapter(userRechargePrinterModalAdopter); } break; case R.id.scanIcon: { //扫描二维码 //initScan(); Intent intent = new Intent(PrinterSettingsMileageFrag.this.getActivity(), page_qr.class); startActivity(intent); } break; case R.id.select_rest_mileage:{ //查询打印机剩余里程 if (Printer.getConnectedPrinters() == null || Printer.getConnectedPrinters().size() == 0) { // 如果打印机未连接,则启动打印机扫描活动 Intent scanningIntent = new Intent(getContext(), ScanningActivity.class); startActivityForResult(scanningIntent, ScanningActivity.SCANNING_FOR_PRINTER); }else { //获取当前连接的打印机 if(Printer.getConnectedPrinters() != null && Printer.getConnectedPrinters().size() > 0){ printer=Printer.getConnectedPrinters().get(0); } byte[] selectArray = {0x1F, 0x1B, 0x1F, 0x78, 0x04, 0x05,0x06,0x05,0x04}; try { printer.print( selectArray, new PrinterResponse() { @Override public void onPrinterResponse(byte[] bytes) { Log.e("onPrinterResponse: ", Arrays.toString(bytes)); restNumber=new String(bytes); } } ); } catch (IOException e) { e.printStackTrace(); } } try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } restMileage.setText(restNumber+"m"); break; } case R.id.save_txt: { edTxt=mileageSizeTxt.getText().toString(); //查询充值里程 if (edTxt==null) { if (number != null) { SharedPreferences.Editor editor = getActivity().getSharedPreferences("RechargeNumberFile", MODE_PRIVATE).edit(); // 存储数据(键值对) editor.clear(); // 应用编辑(提交保存) editor.commit(); getMileageByNumber(number); } } if (Printer.getConnectedPrinters() == null || Printer.getConnectedPrinters().size() == 0) { // 如果打印机未连接,则启动打印机扫描活动 Intent scanningIntent = new Intent(getContext(), ScanningActivity.class); startActivityForResult(scanningIntent, ScanningActivity.SCANNING_FOR_PRINTER); }else { //获取当前连接的打印机 if(Printer.getConnectedPrinters() != null && Printer.getConnectedPrinters().size() > 0){ printer=Printer.getConnectedPrinters().get(0); } if(edTxt!=null) { getMileageByNumber(edTxt); } //获取打印机加密数据的指令 byte[] byteArray = {0x1F, 0x1B, 0x1F, 0x79, 0x14, 0x15, 0x14}; //byte[] byteArray = hexStringToByteArray(messages); // Uncomment if you have a hexStringToByteArray method System.out.println("发送" + Arrays.toString(byteArray)); System.out.println("连接的mac"+connectionMac); // saveBitmap(bitmap) Log.e("打印机是否连接", String.valueOf(printer.isConnected())); Log.e("打印机连接类型", String.valueOf(printer.getConnectType())); try { printer.print( byteArray, new PrinterResponse() { @Override public void onPrinterResponse(byte[] bytes) { Log.e("onPrinterResponse: ", Arrays.toString(bytes)); byte[] centerDate = hardwareEncryption.removeFirstAndLast(bytes); if (centerDate.length > 0) { PrinterSettingsMileageFrag.this.printReturnNumber = centerDate; // 调用回调通知打印完成 onPrintComplete(printReturnNumber); } } } ); } catch (IOException e) { e.printStackTrace(); } try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("发送" + Arrays.toString(prefixEncryptionAfterMileagebyteMileageEncryption)); // saveBitmap(bitmap) Log.e("打印机是否连接", String.valueOf(printer.isConnected())); Log.e("打印机连接类型", String.valueOf(printer.getConnectType())); for (byte b : prefixEncryptionAfterMileagebyteMileageEncryption) { System.out.println("循环发送充值的数据" + String.format("%02X ", b)); } try { printer.print(prefixEncryptionAfterMileagebyteMileageEncryption, new PrinterResponse() { @Override public void onPrinterResponse(byte[] bytes) { Log.e("onPrinterResponse: ", Arrays.toString(bytes)); for (byte b : bytes) { System.out.println("循环充值后返回的数据" + String.format("%02X ", b)); } if(bytes.length>0) { status=true; //Toast.makeText(getActivity(), "Pay successful", Toast.LENGTH_SHORT).show(); //通知充值端耗材消耗 setTopUpPay(connectionMac, number); }else if(bytes.length<=0){ status=false; //Toast.makeText(getActivity(), "Pay fail", Toast.LENGTH_SHORT).show(); } } }); } catch (IOException e) { e.printStackTrace(); } } } if (printer==null) { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } if (status) { Toast.makeText(getActivity(), "Pay successful", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getActivity(), "Pay fail", Toast.LENGTH_SHORT).show(); } } break; } } @Override public void onPrintComplete(byte[] result) { byte[] encryptionAfter=hardwareEncryption.removeFirstTwo(hardwareEncryption.CRC16_XMODEM(printReturnNumber,0)); byte[] mileagebyte=hardwareEncryption.intTo8DigitHexString(mileageNumber*1000); byte[] mileageEncryption=hardwareEncryption.removeFirstTwo(hardwareEncryption.CRC16_XMODEM(mileagebyte,1)); byte[] prefix= {0x1F, 0x1B, 0x1F, 0x77}; byte[] prefixEncryptionAfter=hardwareEncryption.concatenateArrays(prefix, encryptionAfter); byte[] prefixEncryptionAfterMileagebyte=hardwareEncryption.concatenateArrays(prefixEncryptionAfter, mileagebyte); byte[] prefixEncryptionAfterMileagebyteMileageEncryption=hardwareEncryption.concatenateArrays(prefixEncryptionAfterMileagebyte, mileageEncryption); PrinterSettingsMileageFrag.this.prefixEncryptionAfterMileagebyteMileageEncryption=prefixEncryptionAfterMileagebyteMileageEncryption; } //绑定门店 private void setBindPrinterAndOutlet(final String deviceName,final String deviceId,final String storeCode) { String urlApi = PAY_BASE_URL+"api/Extend/basedevice/CreateAndStoreByApk"; Log.e("newUserUrl==",urlApi); //loadershow(); System.out.println(urlApi + ".......................ural"); StringRequest request = new StringRequest(Request.Method.POST, urlApi, response -> { try { Log.e("response",response); JSONObject jsonObject = new JSONObject(response); String msg = jsonObject.getString("msg"); int code = jsonObject.getInt("code"); if (code==200) { Toast.makeText(getActivity(), "Printer binding successful", Toast.LENGTH_SHORT).show(); }else { Toast.makeText(getActivity(), "Printer binding fail", Toast.LENGTH_SHORT).show(); } } catch (JSONException e) { e.printStackTrace(); } loaderHide(getActivity()); }, error -> { if (error == null || error.networkResponse == null) { return; } String body; //get status code here final String statusCode = String.valueOf(error.networkResponse.statusCode); //get response body and parse with appropriate encoding try { body = new String(error.networkResponse.data, "UTF-8"); Log.e("VollyErrorr: ", body); } catch (UnsupportedEncodingException e) { // exception } loaderHide(getActivity()); }) { @Override protected Map getParams() { Map map = new HashMap<>(); map.put("DeviceNo",deviceId); map.put("DeviceName",deviceName); map.put("StoreCode",storeCode); Log.e("Params==",map.toString()); return map; } public Map getHeaders() { Map header = new HashMap<>(); header.put("Authorization", "Bearer " + loginToken); System.out.println("Beareaar Toeken....: " + loginToken); return header; } }; request.setRetryPolicy(new DefaultRetryPolicy(MY_SOCKET_TIMEOUT, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); final RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); requestQueue.add(request); requestQueue.addRequestFinishedListener(request1 -> requestQueue.getCache().clear()); } //根据用户查询门店 private void getOutIdByUserId(final String userId) { String urlApi = ETE_BASE_URL+"api/permission/organize/CreateByApk"; Log.e("newUserUrl==",urlApi); //loadershow(); System.out.println(urlApi + ".......................ural"); StringRequest request = new StringRequest(Request.Method.POST, urlApi, response -> { try { Log.e("response",response); JSONObject jsonObject = new JSONObject(response); String msg = jsonObject.getString("msg"); int status = jsonObject.getInt("status"); } catch (JSONException e) { e.printStackTrace(); } loaderHide(getActivity()); }, error -> { if (error == null || error.networkResponse == null) { return; } String body; //get status code here final String statusCode = String.valueOf(error.networkResponse.statusCode); //get response body and parse with appropriate encoding try { body = new String(error.networkResponse.data, "UTF-8"); Log.e("VollyErrorr: ", body); } catch (UnsupportedEncodingException e) { // exception } loaderHide(getActivity()); }) { @Override protected Map getParams() { Map map = new HashMap<>(); Log.e("Params==",map.toString()); return map; } public Map getHeaders() { Map header = new HashMap<>(); header.put("Authorization", "Bearer " + loginToken); System.out.println("Beareaar Toeken....: " + loginToken); return header; } }; request.setRetryPolicy(new DefaultRetryPolicy(MY_SOCKET_TIMEOUT, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); final RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); requestQueue.add(request); requestQueue.addRequestFinishedListener(request1 -> requestQueue.getCache().clear()); } //根据耗材编号查询里程 已经充值 private void getMileageByNumber(final String number) { String urlApi = PAY_BASE_URL+"api/Extend/baseconsumablemanagement/GetConsumableInfo"+"?id="+number; //loadershow(); Log.e("ekfqkljgl: ", urlApi); System.out.println(urlApi); StringRequest stringRequest = new StringRequest(Request.Method.GET, urlApi, response -> { try { JSONObject jsonRes = new JSONObject(response); System.out.println("mileage"+response); int status = jsonRes.getInt("code"); String msg = jsonRes.getString(ETE_MSG); JSONObject dataStr=jsonRes.getJSONObject(ETE_DATA); mileageNumber=dataStr.getInt("totalMeters"); //System.out.println("设备好"+dataStr.getString("deviceId")); // MileageModal mileageModal =new MileageModal(); // mileageModal.setMileageSize(mileageNumber); // mileageModal.setId(dataStr.getInt("id")); // mileageModals.add(mileageModal); // mileageAdapter = new MileageAdapter(getActivity(), mileageModals, null); // productRecyclerview.setAdapter(mileageAdapter); if(null!=dataStr.getString("deviceId")&&!dataStr.getString("deviceId").equals("")) { Toast.makeText(getActivity(), "consumable use ", Toast.LENGTH_SHORT).show(); } } catch (JSONException e) { e.printStackTrace(); } loaderHide(getActivity()); }, error -> { if (error instanceof TimeoutError || error instanceof NoConnectionError) { Toast.makeText(getActivity(), R.string.internet_connection_fail, Toast.LENGTH_SHORT).show(); } else { Log.e("dfwengfqe: ", error.getMessage()); } loaderHide(getActivity()); }) { @Override public Map getHeaders() throws AuthFailureError { HashMap headers = new HashMap(); headers.put("Authorization", "Bearer " + loginToken); return headers; } }; stringRequest.setRetryPolicy(new DefaultRetryPolicy(MY_SOCKET_TIMEOUT, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); final RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); requestQueue.add(stringRequest); requestQueue.addRequestFinishedListener(request -> requestQueue.getCache().clear()); } //返回充值信息给充值管理端 private void setTopUpPay(final String deviceCode,final String consumableNo) { String urlApi = PAY_BASE_URL+"api/Extend/baseconsumablemanagement/ActiveConsumable"; Log.e("newUserUrl==",urlApi); // loadershow(); System.out.println(urlApi + ".......................ural"); StringRequest request = new StringRequest(Request.Method.POST, urlApi, response -> { try { Log.e("response",response); JSONObject jsonObject = new JSONObject(response); String msg = jsonObject.getString("msg"); // int status = jsonObject.getInt("status"); } catch (JSONException e) { e.printStackTrace(); } loaderHide(getActivity()); }, error -> { if (error == null || error.networkResponse == null) { return; } String body; //get status code here final String statusCode = String.valueOf(error.networkResponse.statusCode); //get response body and parse with appropriate encoding try { body = new String(error.networkResponse.data, "UTF-8"); Log.e("VollyErrorr: ", body); } catch (UnsupportedEncodingException e) { // exception } loaderHide(getActivity()); }) { @Override protected Map getParams() { Map map = new HashMap<>(); map.put("deviceCode",deviceCode); map.put("consumableNo",consumableNo); Log.e("Params==",map.toString()); return map; } public Map getHeaders() { Map header = new HashMap<>(); header.put("Authorization", "Bearer " + loginToken); System.out.println("Beareaar Toeken....: " + loginToken); return header; } }; request.setRetryPolicy(new DefaultRetryPolicy(MY_SOCKET_TIMEOUT, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); final RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); requestQueue.add(request); requestQueue.addRequestFinishedListener(request1 -> requestQueue.getCache().clear()); } //根据门店id查询相关绑定机器 private void getBindPrintList(final String StoreCode) { String urlApi = PAY_BASE_URL+"api/Extend/basedevice/GetListByStore"+"?StoreCode="+StoreCode; //loadershow(); Log.e("ekfqkljgl: ", urlApi); System.out.println(urlApi); StringRequest stringRequest = new StringRequest(Request.Method.GET, urlApi, response -> { try { JSONObject jsonRes = new JSONObject(response); int status = jsonRes.getInt("code"); String msg = jsonRes.getString(ETE_MSG); JSONObject dataStr=jsonRes.getJSONObject(ETE_DATA); } catch (JSONException e) { e.printStackTrace(); } loaderHide(getActivity()); }, error -> { if (error instanceof TimeoutError || error instanceof NoConnectionError) { Toast.makeText(getActivity(), R.string.internet_connection_fail, Toast.LENGTH_SHORT).show(); } else { Log.e("dfwengfqe: ", error.getMessage()); } loaderHide(getActivity()); }) { @Override public Map getHeaders() throws AuthFailureError { HashMap headers = new HashMap(); headers.put("Authorization", "Bearer " + loginToken); return headers; } }; stringRequest.setRetryPolicy(new DefaultRetryPolicy(MY_SOCKET_TIMEOUT, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); final RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); requestQueue.add(stringRequest); requestQueue.addRequestFinishedListener(request -> requestQueue.getCache().clear()); } // public void loadershow() { // if (progress == null) { // progress = new ProgressDialog(getActivity(), R.style.progressTheme); // } // progress.setTitle("Food Safety"); // progress.setMessage(getString(R.string.loading)); // progress.setCancelable(false); // progress.show(); // } //下面都是扫描二维码 // public void initScan() { // IntentIntegrator integrator = new IntentIntegrator(getActivity()); // // 设置要扫描的条码类型,ONE_D_CODE_TYPES:一维码,QR_CODE_TYPES-二维码 // integrator.setDesiredBarcodeFormats(); // integrator.setCaptureActivity(CaptureActivity.class); //设置打开摄像头的Activity // integrator.setPrompt("请对准二维码"); //底部的提示文字,设为""可以置空 // integrator.setCameraId(0); //前置或者后置摄像头 // integrator.setBeepEnabled(false); //扫描成功的「哔哔」声,默认开启 // integrator.setBarcodeImageEnabled(true); // integrator.initiateScan(); // } // // @Override // public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { // super.onActivityResult(requestCode, resultCode, data); // if (requestCode == IntentIntegrator.REQUEST_CODE) { // IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); // if (scanResult != null && scanResult.getContents() != null) { // String result = scanResult.getContents(); // Log.d("扫码返回: ", result); // } // } // 获取扫描结果 // IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); // if (result != null) { // if (result.getContents() == null) { // // 扫描取消或未发现二维码 // Toast.makeText(getActivity(), "扫描取消或未发现二维码", Toast.LENGTH_LONG).show(); // } else { // // 获取扫描到的内容 // String scannedContent = result.getContents(); // Toast.makeText(getActivity(), "扫描结果: " + scannedContent, Toast.LENGTH_LONG).show(); // } // } else { // super.onActivityResult(requestCode, resultCode, data); // } // } // 初始化定位服务 private void requirePermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION}, 101); }else{ MyLocation.LocationResult locationResult = new MyLocation.LocationResult(){ @Override public void gotLocation(Location location){ setLocation(location); } }; MyLocation myLocation = new MyLocation(); myLocation.getLocation(getActivity(), locationResult); } } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == 101){ for (int i = 0; i < grantResults.length; i++) { if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { //判断是否勾选禁止后不再询问 boolean showRequestPermission = ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), permissions[i]); if (showRequestPermission) { Toast.makeText(getContext(),"permissions no apply",Toast.LENGTH_LONG).show(); } }else { MyLocation.LocationResult locationResult = new MyLocation.LocationResult(){ @Override public void gotLocation(Location location){ setLocation(location); } }; MyLocation myLocation = new MyLocation(); myLocation.getLocation(getActivity(), locationResult); } } } super.onRequestPermissionsResult(requestCode, permissions, grantResults); } private void setLocation(Location location) { if (location!=null) { String mfeatureName = null; Geocoder geocoder = new Geocoder(getActivity()); List
addList = null;// 解析经纬度 try { addList = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1); } catch (IOException e) { e.printStackTrace(); } if (addList != null && addList.size() > 0) { for (int i = 0; i < addList.size(); i++) { Address add = addList.get(i); mfeatureName = add.getFeatureName(); System.out.println("经纬度"+mfeatureName); Toast.makeText(getActivity(),"经纬度"+mfeatureName,Toast.LENGTH_LONG).show(); } } } } }