一、权限
<!--获取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());
}
}
四、结果展示(路径来不及截图,随便放一张)