尝试用Android获取IMEI,折腾的一天,结果只有一句话,是不是用混合编程比较好?

最近打算独立开发一款工具类的APP,已经完成部分UI和内容。为了更好的管理APP,开始希望获得手机的电话号码,后来找了很多资料,发现获取不了。
然后查看了很多资料
为了获取android的IMEI 查了 很多资料,但是都是2012年的,android已经更新换代很久了。
后来发现2019年起的很多手机都用不 了了,因为出现了移动安全联盟,屏蔽了很多功能。
后来只找到下面这一句话
//获取手机启动的串号作为标识符
String androidId = Settings.System.getString(getContentResolver(), Settings.Secure.ANDROID_ID);

下面的都已经失效了。我的手机是vivo z5x 今年购进的
希望大家不要像我一样走黑路了。
为了获取类似IMEI的功能 ,还可以在对应的手机的社区里面找
一个叫MSA的移动标识匹配SDK,让你的程序依赖于他们。
做这个的前提是还你要在对应的手机厂商的应用平台去注册获得对应厂商的uuid。
适配越来越麻烦了。
是否要考虑换平台了,用混合模式编程???

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.provider.Settings;
import android.telephony.TelephonyManager;

import java.util.Date;
import java.util.UUID;

import androidx.annotation.RequiresApi;
import androidx.core.app.ActivityCompat;

/**

  • class name:com.whjlrj.goutongez3.SIMCardInfo

  • class description:读取Sim卡信息

  • PS: 必须在加入各种权限

  • Date:2020-8-27-

  • @version 1.00

  • @author CODYY)fangtao

*/

public class SIMCardInfo {

/** * TelephonyManager提供设备上获取通讯服务信息的入口。 应用程序可以使用这个类方法确定的电信服务商和国家 以及某些类型的用户访问信息。 * 应用程序也可以注册一个监听器到电话收状态的变化。不需要直接实例化这个类 * 使用Context.getSystemService(Context.TELEPHONY_SERVICE)来获取这个类的实例。 */private TelephonyManager telephonyManager;/** * 国际移动用户识别码 */private String IMSI;private Object MainActivity;private String imei;public SIMCardInfo(Context context) {    telephonyManager = (TelephonyManager) context            .getSystemService(Context.TELEPHONY_SERVICE);}/** * Role:获取当前设置的电话号码 * 
Date:2020-8-27 *
@author CODYY)fangtao */public String getNativePhoneNumber(Context context) { String NativePhoneNumber = null; if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_NUMBERS) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return ""; } NativePhoneNumber = telephonyManager.getLine1Number(); return NativePhoneNumber;}/** * Role:Telecom service providers获取手机服务商信息
* 需要加入权限
* Date:2020-8-27
* * @author CODYY)fangtao */public String getProvidersName(Context context) { String ProvidersName = null; // 返回唯一的用户ID;就是这张卡的编号神马的 if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return ""; } IMSI = telephonyManager.getSubscriberId(); // IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。 System.out.println(IMSI); if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) { ProvidersName = "中国移动"; } else if (IMSI.startsWith("46001")) { ProvidersName = "中国联通"; } else if (IMSI.startsWith("46003")) { ProvidersName = "中国电信"; } return ProvidersName;}@RequiresApi(api = Build.VERSION_CODES.O)public String getIMEI(Context context) { if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return ""; } // imei是手机的硬件编号 // imei = telephonyManager.getImei(); String uuid = new Date().getTime() + "_AndroidQ_" + UUID.randomUUID().toString(); return uuid;}

}

更多相关文章

  1. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  2. Android(安卓)获取View的位置参数:x,y和相对父容器的偏移量以及中
  3. Android靠哪些东西能打败iphone
  4. Android应用程序在手机上运行的步骤
  5. 获取Android自带资源的方式
  6. Android下如何获取Mac地址?
  7. Android实在在app内部控制按键震动
  8. Android(安卓)获取设备各种信息以及其它
  9. android 获取api key

随机推荐

  1. Android 手绘 - 支持保存为图片
  2. Android常用控件之ExpandableList的使用
  3. Windows Mobile 和 Android(安卓)对比分
  4. Activity 属性设置大全
  5. 解决gradle下载慢,下载失败的办法
  6. android创建漂亮对话框
  7. Android 4.0 开发者指南(27) —— Resour
  8. Android+JNI调用–文件操作
  9. Android(安卓)requires compiler complia
  10. Android 监听开机广播打开APP