IMEI是一个串号,每个手机出厂都有的,android 程序获取IMEI权限实际上就是我们常说的获取ROOT权限。
获取ROOT权限的作用:
1、可以安装一些需要root权限的软件应用,要知道有些软件是需要这个软件才能安装的
2、可以卸载系统自带的软件应用,比如一些运营商定制手机的预装应用,卸载了它们还能节省内存空间呢
3、可以修改系统,对自己手机系统进行一些DIY,让系统用起来更加顺手、舒服
4、此外root还会给人带来一种自由感,不再受原系统的限制,当然还有一些其他的好处,各位慢慢自己体会吧。
但是获取root权限也是有坏处的:
1、很多手机厂商以用户私自获取root权限为由拒绝保修,所以获取权限之后可能失去保修
2、对于新手用户而言,拥有这个权限之后,也就意味着手机被搞坏的可能性更大了一些,要知道root可是具有系统所有的权限,不当的 *** 作会损害系统
3、对系统的安全性造成一些破坏,一些手机病毒、木马可能会趁机而入。
获取不到是因为权限没有开放,要做一下配置:
加入权限
在manifestxml文件中要添加 <uses-permission android:name="androidpermissionREAD_PHONE_STATE" />
实现方法参考代码
package netsunniwellapp;
import androidappActivity;
import androidosBundle;
import androidtelephonyCellLocation;
import androidtelephonyPhoneStateListener;
import androidtelephonyTelephonyManager;
public class TelManager extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
TelephonyManager tm = (TelephonyManager) thisgetSystemService(TELEPHONY_SERVICE);
/
电话状态:
1tmCALL_STATE_IDLE=0 无活动
2tmCALL_STATE_RINGING=1 响铃
3tmCALL_STATE_OFFHOOK=2 摘机
/
tmgetCallState();//int
/
电话方位:
/
tmgetCellLocation();//CellLocation
/
唯一的设备ID:
GSM手机的 IMEI 和 CDMA手机的 MEID
Return null if device ID is not available
/
tmgetDeviceId();//String
/
设备的软件版本号:
例如:the IMEI/SV(software version) for GSM phones
Return null if the software version is not available
/
tmgetDeviceSoftwareVersion();//String
/
手机号:
GSM手机的 MSISDN
Return null if it is unavailable
/
tmgetLine1Number();//String
/
附近的电话的信息:
类型:List<NeighboringCellInfo>
需要权限:androidManifestpermission#ACCESS_COARSE_UPDATES
/
tmgetNeighboringCellInfo();//List<NeighboringCellInfo>
/
获取ISO标准的国家码,即国际长途区号。
注意:仅当用户已在网络注册后有效。
在CDMA网络中结果也许不可靠。
/
tmgetNetworkCountryIso();//String
/
MCC+MNC(mobile country code + mobile network code)
注意:仅当用户已在网络注册时有效。
在CDMA网络中结果也许不可靠。
/
tmgetNetworkOperator();//String
/
按照字母次序的current registered operator(当前已注册的用户)的名字
注意:仅当用户已在网络注册时有效。
在CDMA网络中结果也许不可靠。
/
tmgetNetworkOperatorName();//String
/
当前使用的网络类型:
例如: NETWORK_TYPE_UNKNOWN 网络类型未知 0
NETWORK_TYPE_GPRS GPRS网络 1
NETWORK_TYPE_EDGE EDGE网络 2
NETWORK_TYPE_UMTS UMTS网络 3
NETWORK_TYPE_HSDPA HSDPA网络 8
NETWORK_TYPE_HSUPA HSUPA网络 9
NETWORK_TYPE_HSPA HSPA网络 10
NETWORK_TYPE_CDMA CDMA网络,IS95A 或 IS95B 4
NETWORK_TYPE_EVDO_0 EVDO网络, revision 0 5
NETWORK_TYPE_EVDO_A EVDO网络, revision A 6
NETWORK_TYPE_1xRTT 1xRTT网络 7
/
tmgetNetworkType();//int
/
手机类型:
例如: PHONE_TYPE_NONE 无信号
PHONE_TYPE_GSM GSM信号
PHONE_TYPE_CDMA CDMA信号
/
tmgetPhoneType();//int
/
Returns the ISO country code equivalent for the SIM provider's country code
获取ISO国家码,相当于提供SIM卡的国家码。
/
tmgetSimCountryIso();//String
/
Returns the MCC+MNC (mobile country code + mobile network code) of the provider of the SIM 5 or 6 decimal digits
获取SIM卡提供的移动国家码和移动网络码5或6位的十进制数字
SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断)
/
tmgetSimOperator();//String
/
服务商名称:
例如:中国移动、联通
SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断)
/
tmgetSimOperatorName();//String
/
SIM卡的序列号:
需要权限:READ_PHONE_STATE
/
tmgetSimSerialNumber();//String
/
SIM的状态信息:
SIM_STATE_UNKNOWN 未知状态 0
SIM_STATE_ABSENT 没插卡 1
SIM_STATE_PIN_REQUIRED 锁定状态,需要用户的PIN码解锁 2
SIM_STATE_PUK_REQUIRED 锁定状态,需要用户的PUK码解锁 3
SIM_STATE_NETWORK_LOCKED 锁定状态,需要网络的PIN码解锁 4
SIM_STATE_READY 就绪状态 5
/
tmgetSimState();//int
/
唯一的用户ID:
例如:IMSI(国际移动用户识别码) for a GSM phone
需要权限:READ_PHONE_STATE
/
tmgetSubscriberId();//String
/
取得和语音邮件相关的标签,即为识别符
需要权限:READ_PHONE_STATE
/
tmgetVoiceMailAlphaTag();//String
/
获取语音邮件号码:
需要权限:READ_PHONE_STATE
/
tmgetVoiceMailNumber();//String
/
ICC卡是否存在
/
tmhasIccCard();//boolean
/
是否漫游:
(在GSM用途下)
/
tmisNetworkRoaming();//
}
}
你好澈澈24M6,IOS系统中,获取设备唯一标识的方法有很多:
一UDID(Unique Device Identifier)
UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和数字组成。
二UUID(Universally Unique Identifier)
UUID是Universally Unique Identifier的缩写,中文意思是通用唯一识别码
三MAC Address
四OPEN UDID
五广告标示符(IDFA-identifierForIdentifier)
六Vindor标示符 (IDFV-identifierForVendor)
Vendor是CFBundleIdentifier(反转DNS格式)的前两部分。来自同一个运营商的应用运行在同一个设备上,此属性的值是相同的;不同的运营商应用运行在同一个设备上值不同。
经测试,只要设备上有一个tencent的app,重新安装后的identifierForVendor值不变,如果tencent的app全部删除,重新安装后的identifierForVendor值改变。
但是很不幸,上面所有这些表示设备唯一号的标识,在IOS7中要么被禁止使用,要么重新安装程序后两次获取的标识符不一样。
一:总览
iOS设备标识码
1、 device ID
2、 IMEI :iOS5之后被禁止,写在主板上,不会变化。
3、 IDFA :Identifier For Advertising,iOS独有的广告标识符。但是用户可以更改,不适用于做唯一标识。系统重置、在设置里还原广告标识符,都会更改IDFA。
IDFA是一串16进制的32位串。
IDFA是苹果iOS 6开始新增的广告标识符,英文全称是Identifier for Advertising,用于给开发者跟踪广告效果用的,可以简单理解为iPhone的设备临时身份z号,是说临时身份z号,是因为IDFA允许用户更换。iOS用户可以通过(设置-通用-还原-还原位置与隐私)更换IDFA。iOS10系统提供用户禁止广告跟踪功能,用户勾选了这个功能后,应用程序讲无法取读到设备的IDFA。
IDFA是目前苹果生态广告交易的主要标识,一般跟广告商 交易一个用户后,广告商 需要给你提供用户的 IDFA作为凭证。主流的广告平台广点通、新浪粉丝通对账都是基于IDFA的
4、 MAC地址 :硬件标识符,包括WiFi mac地址和蓝牙mac地址。iOS 7 之后被禁止(同时禁止的还有OpenUDID)。
MAC地址在网络上用来区分设备的唯一性,接入网络的设备都有一个MAC地址,他们肯定都是不同的,是唯一的。一部iPhone上可能有多个MAC地址,包括WIFI的、SIM的等,但是iTouch和iPad上就有一个WIFI的,因此只需获取WIFI的MAC地址就好了,也就是en0的地址。MAC地址就如同我们身份z上的身份z号码,具有全球唯一性。但在iOS7之后,如果请求Mac地址都会返回一个固定值。
5、 UDID :用来标示设备的唯一性 。iOS 6 之后被禁止获取系统原生的UDID,但可以通过uuid,写入到钥匙串中,从而获得自定义的UDID(非系统原生),即使用户重装APP,只要每次都取这个钥匙串返回,就是不变的。
UDID是由40个字符的字母和数据组成
Unique Device Indentifier,用户不能更改,适合做唯一标识。但是苹果禁止应用获取UDID。
6、 UUID :APP重装后会变化
Android设备标识码
1、 Device ID 又叫做设备ID,可以用系统提供的TelephonyManager服务来获取,具有唯一性。其中又包括IMEI和MEID/ESN。
2、 IMEI :GSM设备返回的,并且是写在主板上的,重装APP不会改变IMEI。Android 60以上系统需要用户授予read_phone_state权限,如果用户拒绝就无法获得。
3、 MAC地址 :硬件标识符,包括WiFi mac地址和蓝牙mac地址。Android 60之后被禁止,若获取则会被判定为有害应用。
4、 MEID/ESN :CDMA设备返回的,一般不使用。
5、 UDID :用来标示设备的唯一性。获取UUID后,写入so文件生成UDID。即使APP重装,值也不变,除非root手机(普通用户做不到)
6、 UUID :APP重装之后会改变
---未整理完,待续---
IMEI:International Mobile Equipment Identity,国际移动设备身份码的缩写。是由15位数字组成的“电子串号”,它与每台手机一一对应,每个IMEI在世界上都是唯一的。
UDID:Unique Device Identifier,唯一设备标识码。
UUID:Universally Unique Identifier,通用唯一识别码。目前最广泛应用的UUID,是微软公司的全局唯一标识符GUID。其目的是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。
Android获取IMSI和IMEI :
IMSI是一个唯一的数字,标识了GSM和UMTS 网络里的唯一一个用户
它存储 在手机的SIM卡里,它会通过手机发送到网络上。
IMEI也是一串唯一的数字,标识了GSM 和UMTS网络里的三星 Galaxy I9100。
它通常被打印在手机里电池下面的那一面,拨 #06# 也能看到它。
代码:
这里是你在Android里读出 唯一的 IMSI-ID / IMEI-ID 的方法。
Java:
String myIMSI =
androidosSystemPropertiesget(androidtelephonyTelephonyPropertiesPROPERTY_IMSI
);
// within my emulator it returns: 310995000000000
String myIMEI =
androidosSystemPropertiesget(androidtelephonyTelephonyPropertiesPROPERTY_IMEI
);
// within my emulator it returns: 000000000000000
手机号码不是所有的都能获取。只是有一部分可以拿到。这个是由于移动运营商没有把手
机号码的数据写入到sim卡中。sim卡只有唯一的编号,供网络与设备识别那就是imsi号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。
试想,你的sim丢失后,补办一张新的会换号码吗 —不会就是因为在你的手机号码对应的 imsi号在移动运营商中被修改成新sim卡的imsi号码。
这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。
/ 获得手机的一些标志符 @param c @return String 手机的类型 /
public String fetch_status(Context c) {
TelephonyManager tm = (TelephonyManager) c
getSystemService(ContextTELEPHONY_SERVICE);//
String str = "";
String IMSI = tmgetSubscriberId();
str += "DeviceId(IMEI) = " + tmgetDeviceId() + "/n";
str += "DeviceSoftwareVersion = " + tmgetDeviceSoftwareVersion()
+ "/n";
str += "Line1Number = " + tmgetLine1Number() + "/n";
return str;
}
1加入权限
在manifestxml文件中要添加 <uses-permission android:name="androidpermissionREAD_PHONE_STATE" />
2、Imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
getDeviceId();
你取得你的设备号以后,在你的程序入口里边oncreate可以加个判断。号码不对的一律执行finish()这样你的apk即使装到别的设备里面也不能运行了。
序列号等敏感信息。
iOS14及以上版本限制所有应用程序访问设备的IMEI(国际移动设备识别码)和序列号等敏感信息,这是为了保护用户的隐私和安全,避免应用程序滥用这些信息。
iOS是苹果公司开发的移动 *** 作系统,它最初发布于2007年,并且只运行于iPhone手机上。
以上就是关于android 程序获取IMEI权限有什么用全部的内容,包括:android 程序获取IMEI权限有什么用、为什么在Android2.3.4下获取不到IMEI、ios系统怎么禁止软件获取IMEI等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)