如何获取IMEI号

查看IMEI(用来唯一标示每个手机的串号) "*#06#"。但在模拟器上运行该程序时得到的 IMEI 是"0000000000000".

 

2版
plpvariant.lib

#include <plpvariant.h>   

 

    TPlpVariantMachineId machineId;
    PlpVariant::GetMachineIdL(machineId);

 

3版
所需要的库:

LIBRARY  etel3rdParty.lib

能力要求:

CAPABILITY None

注意: 有些混淆的信息说明读取IMEI需要"ReadDeviceData"能力.其实这个能力不是用来读取IMEI号的, 而是用来读取 IMSI时用到的. 


1.1    IMEI_Getter.cpp

#include "IMEI_Getter.h"
 
CImeiReader* CImeiReader::NewL(MImeiObserver* aObserver)
{
    CImeiReader* self = NewLC(aObserver);
    CleanupStack::Pop(self);
    return self;
}
 
CImeiReader* CImeiReader::NewLC(MImeiObserver* aObserver)
{
    CImeiReader* self = new (ELeave) CImeiReader(aObserver);
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;

 
CImeiReader::CImeiReader(MImeiObserver* aObserver)
:CActive(EPriorityStandard), iObserver(aObserver), iIdV1Pkg(iIdV1)
{
}
 
CImeiReader::~CImeiReader()
{
    Cancel();
    delete iTelephony;  
}
 
void CImeiReader::ConstructL(void)
{    
    CActiveScheduler::Add(this);
 
    iTelephony = CTelephony::NewL();
    iTelephony->GetPhoneId(iStatus,iIdV1Pkg);
    SetActive();  
}
 
void CImeiReader::DoCancel()
{
    iTelephony->CancelAsync(CTelephony::EGetPhoneIdCancel);
}
 
void CImeiReader::RunL()
{
    iObserver->GotIMEIL(iIdV1.iSerialNumber,iStatus.Int());
}

1.2 IMEI_Getter.h
#include <Etel3rdParty.h>
 
 
class MImeiObserver
{
    public: 
        virtual void GotIMEIL(const TDesC& aIMEI,TInt aError) = 0;
};
 
class CImeiReader : public CActive
{
    public:
        static CImeiReader* NewL(MImeiObserver* aObserver);
        static CImeiReader* NewLC(MImeiObserver* aObserver);
        ~CImeiReader();
 
    protected:    
        void DoCancel();
        void RunL();
 
    private:
        CImeiReader(MImeiObserver* aObserver);
        void ConstructL(void);
 
    private:
        MImeiObserver*    iObserver;
        CTelephony* iTelephony;
        CTelephony::TPhoneIdV1  iIdV1;   
        CTelephony::TPhoneIdV1Pckg iIdV1Pkg;
};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android上获取IMEI号码可以通过使用TelephonyManager类的功能来实现。下面是一个示例代码,可以用于获取IMEI号码: 1. 首先,在AndroidManifest.xml文件中,确保添加了以下许可声明: <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 2. 在你的Activity或Fragment中,可以使用以下代码获取IMEI号码: // 导入所需的包 import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.telephony.TelephonyManager; // 在合适的方法中获取IMEI号码 public String getImeiNumber(Context context) { if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_PHONE_STATE}, 1); return null; } TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); if (telephonyManager != null) { return telephonyManager.getImei(); } return null; } 3. 你可以在任何需要获取IMEI号码的地方调用getImeiNumber()方法。请确保在使用之前检查是否授予了READ_PHONE_STATE权限,如果没有,则应该请求权限。 需要注意的是,为了获取IMEI号码,你必须在AndroidManifest.xml文件中声明READ_PHONE_STATE权限,并且在运行时进行权限检查。此外,值得注意的是,有些设备可能无法提供IMEI号码,而会返回null或其他唯一标识符。所以在使用IMEI号码之前应该对返回结果进行适当的判空处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值