From c5579771d96d48673497efbe01a312fa6aa72e71 Mon Sep 17 00:00:00 2001 From: jieyao Date: Fri, 18 Apr 2025 09:57:07 +0800 Subject: [PATCH] =?UTF-8?q?2.5=20mac=E5=9C=B0=E5=9D=80=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E6=96=87=E4=BB=B6=EF=BC=88mac=E8=8E=B7=E5=8F=96=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E5=B0=B1=E9=9A=8F=E6=9C=BA=E4=B8=80=E4=B8=AA=EF=BC=89?= =?UTF-8?q?=EF=BC=9B=E7=9B=91=E5=90=AC=E8=BF=94=E5=9B=9E=E6=8C=89=E9=94=AE?= =?UTF-8?q?=EF=BC=8C=E6=8F=90=E7=A4=BA=E6=98=AF=E5=90=A6=E9=80=80=E5=87=BA?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E7=9A=84=E6=8F=90=E7=A4=BA=E7=AA=97=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 3 +- .../business/activity/MainActivity.java | 21 +++++++++- .../business/utils/LocalAddressUtil.java | 42 +++++++++++++++++-- 3 files changed, 60 insertions(+), 6 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c08c162..77cb211 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { minSdk 28 targetSdk 28 versionCode 1 - versionName "2.4" + versionName "2.5" // 1.0 IDATA广播模式处理 // 1.1 霍尼韦尔的监听修改(扫描网站二维码跳出程序,监听失效,调整)、斑马PDA广播模式设置 @@ -37,6 +37,7 @@ android { // 2.2 安卓14以上,无法获取mac地址,修改成获取唯一id作为mac地址 // 2.3 适配IOT_Device:sc55g PDA 广播模式 // 2.4 适配 qualcomm:mc50 PDA 广播模式 + // 2.5 mac地址存储文件(mac获取失败就随机一个);监听返回按键,提示是否退出程序的提示窗口 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" ndk { abiFilters 'armeabi-v7a' diff --git a/app/src/main/java/chaoran/business/activity/MainActivity.java b/app/src/main/java/chaoran/business/activity/MainActivity.java index 141de30..5a7846f 100644 --- a/app/src/main/java/chaoran/business/activity/MainActivity.java +++ b/app/src/main/java/chaoran/business/activity/MainActivity.java @@ -2,7 +2,9 @@ package chaoran.business.activity; import android.annotation.SuppressLint; import android.app.Activity; +import android.app.AlertDialog; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ActivityInfo; @@ -493,5 +495,22 @@ public class MainActivity extends AppCompatActivity implements ResultListener{ super.onConfigurationChanged(newConfig); } - + @Override + public void onBackPressed() { + // 创建退出确认对话框 + new AlertDialog.Builder(this) + .setTitle("提示") + .setMessage("是否退出程序?") + .setPositiveButton("确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + finish(); // 关闭当前 Activity + // 如果需要彻底退出应用(适用于多任务场景),可以添加: + // System.exit(0); + } + }) + .setNegativeButton("取消", null) + .show(); + // 不调用 super.onBackPressed(),避免直接退出 + } } \ No newline at end of file diff --git a/app/src/main/java/chaoran/business/utils/LocalAddressUtil.java b/app/src/main/java/chaoran/business/utils/LocalAddressUtil.java index 853f35b..93b2f91 100644 --- a/app/src/main/java/chaoran/business/utils/LocalAddressUtil.java +++ b/app/src/main/java/chaoran/business/utils/LocalAddressUtil.java @@ -22,6 +22,7 @@ import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; +import java.util.Random; import chaoran.business.BuildConfig; @@ -67,12 +68,29 @@ public class LocalAddressUtil { @SuppressLint("JavascriptInterface") @JavascriptInterface public String getMacAddress(){//可以兼容安卓7以下 + SharedPreferences spf = context.getSharedPreferences("chaoran_mac", Context.MODE_PRIVATE); + String saveMac = spf.getString("chaoran_mac", ""); + if (!"".equalsIgnoreCase(saveMac)) { + return saveMac; + } + SharedPreferences.Editor editor = spf.edit(); + String androidMac = getAndroidMac(); + editor.putString("chaoran_mac", androidMac); + editor.apply(); + return androidMac; + } + + /** + * 获取安卓的mac + * @return + */ + private String getAndroidMac() { if (Build.VERSION.SDK_INT >= 34) { // Android 14 is code-named Tiramisu try { return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); }catch (Exception e) { e.printStackTrace(); - return "02:00:00:00:00:02"; + return generateRandomMacAddress(); } } String macAddress = null; @@ -84,7 +102,7 @@ public class LocalAddressUtil { networkInterface = NetworkInterface.getByName("wlan0"); } if (networkInterface == null) { - return "02:00:00:00:00:02"; + return generateRandomMacAddress(); } byte[] addr = networkInterface.getHardwareAddress(); for (byte b : addr) { @@ -94,12 +112,28 @@ public class LocalAddressUtil { buf.deleteCharAt(buf.length() - 1); } macAddress = buf.toString(); - } catch (SocketException e) { + } catch (Exception e) { e.printStackTrace(); - return "02:00:00:00:00:02"; + macAddress = generateRandomMacAddress(); + } + if (macAddress.length() < 4) { + macAddress = generateRandomMacAddress(); } return macAddress; } + + private static String generateRandomMacAddress() { + Random rand = new Random(); + byte[] macBytes = new byte[6]; + rand.nextBytes(macBytes); + macBytes[0] = (byte) (macBytes[0] & 0xfe | 0x02); + StringBuilder macAddress = new StringBuilder(); + for (int i = 0; i < macBytes.length; i++) { + macAddress.append(String.format("%02X%s", macBytes[i], (i < macBytes.length - 1) ? ":" : "")); + } + return macAddress.toString(); + } + @SuppressLint("JavascriptInterface") @JavascriptInterface public String getInfo(int type){