私はAndroid開発に非常に慣れていません。電話のIMEI番号を見つけて、「Android.telephony.TelephonyManager;」を使用したいのですが。
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.getDeviceId();
今コンパイラは言います。コンテキストを変数に解決できません。誰でも私を助けることができますか?欠落している手順には、XMLにユーザー権限も含まれています。
インポートを確認します。インポートする必要があります: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();
このコードを追加します。
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" />
デバイスの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"/>
Context.TELEPHONY_SERVICE
のContext
キーワードを削除して確認するだけです
TelephonyManager tManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String IMEI = tManager.getDeviceId();
コンパイラエラー「コンテキストを変数に解決できません」の場合は、Android.content.Context
パッケージ。
Eclipseでは、コードのエラー行の上にマウスポインターを移動すると、クイックフィックスでそれが発生します。
そして、追加したことを確認してくださいREAD_PHONE_STATE
権限マニフェストファイル。
[まだこの古いソリューションを探している人がいる場合]
AFAIK、TelephonyManager.getLine1Number()は、オペレーターからのさまざまな制約のために信頼できません。いくつかのJavaリフレクションベースのハックがありますが、デバイスによって異なるため、これらのハックは[少なくともサポートされているモデルに関して]役に立たないものにします。
しかし、本当に必要な場合は、数を見つけるための合法的な論理があります。 SMSプロバイダーによってすべてのSMSを照会し、 "To"番号を取得します。
このトリックの追加の利点:1.デバイスにマルチシムがある場合、すべての行番号を取得できます。
短所:1. SMS_READ権限が必要です[申し訳ありません] 2.デバイスでこれまでに使用されたすべてのsim番号を取得します。この問題は、いくつかの制約ロジックを使用して最小限に抑えることができます。時間枠(smsが今日のみ受信または送信された)など。このケースを改善する方法について他の人から聞くのは興味深いでしょう。