web-dev-qa-db-ja.com

Androidでテレフォニーマネージャーを使用してIMEI番号を検索する

私はAndroid開発に非常に慣れていません。電話のIMEI番号を見つけて、「Android.telephony.TelephonyManager;」を使用したいのですが。

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.getDeviceId();

今コンパイラは言います。コンテキストを変数に解決できません。誰でも私を助けることができますか?欠落している手順には、XMLにユーザー権限も含まれています。

11
Arsalan

インポートを確認します。インポートする必要があります:Android.content.Context

そして、このコードを使用します:

TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
// get IMEI
String imei = tm.getDeviceId();
//get The Phone Number
String phone = tm.getLine1Number();

または直接:これを使用:

TelephonyManager tm = (TelephonyManager) getSystemService(Android.content.Context.TELEPHONY_SERVICE);

EDIT: *コンストラクタの新しいクラスにコンテキストを渡す必要があります:*

public class YourClass {
    private Context context;

    //the constructor 
    public YourClass( Context _context){

        this.context = _context;
        //other initialisations .....

    }

   //here is your method to get the IMEI Number by using the Context that you passed to your class
   public String getIMEINumber(){
       //...... place your code here 
   }

}

そして、あなたのアクティビティで、クラスをインスタンス化し、次のようにコンテキストをそれに渡します:

YourClass instance = new YourClass(this);
String IMEI = instance.getIMEINumber();
20
Houcine

このコードを追加します。

 TelephonyManager manager=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
 String deviceid=manager.getDeviceId();

//Device Id is IMEI number

  Log.d("msg", "Device id"+deviceid);

マニフェスト

   <uses-permission Android:name="Android.permission.READ_PHONE_STATE" />
8
Sanket

デバイスのIMEI番号を取得するのに役立つ以下のコードを試してください。

public String getDeviceID() { 
    String deviceId;   
    TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        if (mTelephony.getDeviceId() != null) {
            deviceId = mTelephony.getDeviceId(); 
        } else {
            deviceId = Secure.getString(getApplicationContext().getContentResolver(), Secure.Android_ID); 
        }
    return deviceId;
}

また、マニフェストで電話状態の読み取り権限を付与します。

<uses-permission Android:name="Android.permission.READ_PHONE_STATE"/>
4
Ahsan Kamal

Context.TELEPHONY_SERVICEContextキーワードを削除して確認するだけです

TelephonyManager tManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);

String IMEI = tManager.getDeviceId();
2
Niranj Patel

コンパイラエラー「コンテキストを変数に解決できません」の場合は、Android.content.Context パッケージ。
Eclipseでは、コードのエラー行の上にマウスポインターを移動すると、クイックフィックスでそれが発生します。
そして、追加したことを確認してくださいREAD_PHONE_STATE権限マニフェストファイル。

1
Karthik

[まだこの古いソリューションを探している人がいる場合]

AFAIK、TelephonyManager.getLine1Number()は、オペレーターからのさまざまな制約のために信頼できません。いくつかのJavaリフレクションベースのハックがありますが、デバイスによって異なるため、これらのハックは[少なくともサポートされているモデルに関して]役に立たないものにします。

しかし、本当に必要な場合は、数を見つけるための合法的な論理があります。 SMSプロバイダーによってすべてのSMSを照会し、 "To"番号を取得します。

このトリックの追加の利点:1.デバイスにマルチシムがある場合、すべての行番号を取得できます。

短所:1. SMS_READ権限が必要です[申し訳ありません] 2.デバイスでこれまでに使用されたすべてのsim番号を取得します。この問題は、いくつかの制約ロジックを使用して最小限に抑えることができます。時間枠(smsが今日のみ受信または送信された)など。このケースを改善する方法について他の人から聞くのは興味深いでしょう。

0
Amit K. Saha