获取Android设备唯一标识码IMEI

一、权限

    <!--获取sd卡写的权限,用于文件上传和下载-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

二、Oncreate里面添加“检查并申请权限”


        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.READ_PHONE_STATE},
                    REQUEST_READ_PHONE_STATE);
        } else {
            getDualSimIMEI();
            checkStoragePermission();
        }

三、其余代码

 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_READ_PHONE_STATE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                getDualSimIMEI();
            } else {
                Log.e("IMEI", "权限被拒绝");
            }
        }
        if (requestCode == REQUEST_WRITE_STORAGE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                saveImeiToFile();
            }
        }
    }

    private void getDualSimIMEI() {
        TelephonyManager telephonyManager =
                (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

        try {
            // 获取设备支持的 SIM 卡槽数量(Android 9 及以上)
            int phoneCount = 1;
            phoneCount = telephonyManager.getPhoneCount();

            List<String> imeiList = new ArrayList<>();
//            for (int slotIndex = 0; slotIndex < phoneCount; slotIndex++) {
//                imei = null;
//                // Android 8.0+ 直接使用 getImei(slotIndex)
//                imei = telephonyManager.getImei(slotIndex);
//                Log.d("IMEI", String.join("\n", imei));
//
//                if (imei != null && !imei.isEmpty()) {
//                    imeiList.add("SIM " + (slotIndex + 1) + ": " + imei);
//                }
//            }
                imei = null;
                // Android 8.0+ 直接使用 getImei(slotIndex)
                imei = telephonyManager.getImei(0);
                Log.d("IMEI", String.join("\n", imei));

                if (imei != null && !imei.isEmpty()) {
                    imeiList.add("SIM " + (1) + ": " + imei);
                }


            // 输出结果
            if (imeiList.isEmpty()) {
                Log.d("IMEI", "无法获取 IMEI");
            } else {
                Log.d("IMEI", String.join("\n", imeiList));
            }
        } catch (SecurityException e) {
            Log.e("IMEI", "权限不足: " + e.getMessage());
        } catch (Exception e) {
            Log.e("IMEI", "获取失败: " + e.getMessage());
        }
    }

    private void checkStoragePermission() {
        if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    REQUEST_WRITE_STORAGE
            );
        } else {
            saveImeiToFile();
        }
    }

    private void saveImeiToFile() {
//        String imei = getImei(); // 替换为你的 IMEI 获取方法
        if (imei == null || imei.isEmpty()) {
            Log.e("IMEI", "IMEI 为空");
            return;
        }

        try {
//            // 写入到应用内部存储(无需权限)
//            File internalFile = new File(getFilesDir(), "imei.txt");
//            FileOutputStream fosInternal = new FileOutputStream(internalFile);
//            fosInternal.write(imei.getBytes());
//            fosInternal.close();
//            Log.d("IMEI", "内部存储路径: " + internalFile.getAbsolutePath());

            // 保存到外部存储的 Downloads 目录(电脑可直接访问)
            File downloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
            File imeiFile = new File(downloadsDir, "imei.txt");
            FileOutputStream fos = new FileOutputStream(imeiFile);
            fos.write(imei.getBytes());
            fos.close();
            Log.d("IMEI", "外部路径: " + imeiFile.getAbsolutePath()); // /sdcard/Download/imei.txt

        } catch (IOException e) {
            Log.e("IMEI", "写入失败: " + e.getMessage());
        }
    }

四、结果展示(路径来不及截图,随便放一张)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值