2011-09-22 18 views
7

खोजने के लिए एंड्रॉइड में टेलीफोनी प्रबंधक का उपयोग करना मैं एंड्रॉइड डेवलपमेंट के लिए बहुत नया हूं। मैं फोन का आईएमईआई नंबर और "android.telephony.TelephonyManager" का उपयोग करना चाहता हूं।आईएमईआई नंबर

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

अब संकलक कहता है। संदर्भ एक चर के लिए हल नहीं किया जा सकता है। कोई भी मेरी मदद कर सकता है? में मुझे कौन सा चरण गुम है I XML में उपयोगकर्ता अनुमति भी शामिल है।

उत्तर

14

अपने आयात सत्यापित करें, आप आयात करना चाहिए: 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); 

संपादित करें: * आपको कन्स्ट्रक्टर पर अपनी नई कक्षा में संदर्भ पास करना चाहिए: *

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 
    } 

} 

और अपनी गतिविधि में, अपने वर्ग instanciate और इस तरह यह करने के लिए संदर्भ पारित:

YourClass instance = new YourClass(this); 
String IMEI = instance.getIMEINumber(); 
+0

यह अपने प्रश्न के रूप में ही है .. –

+0

i 'देखना मेरी संपादित करें ... – Houcine

+0

अपनी शाबाशी अब, लेकिन अगली बार पहला सवाल ध्यान से के बाद तो उचित तरीके –

1

संकलक त्रुटि के लिए "संदर्भ में एक चर को हल नहीं किया जा सकता है", सुनिश्चित करें कि आप आयात किया है android.content.Context पैकेज।
ग्रहण में, जब आप माउस पॉइंटर को कोड में त्रुटि रेखा पर ले जाते हैं तो त्वरित सुधार होते हैं।
और सुनिश्चित करें कि आपने READ_PHONE_STATE अनुमति मैनिफ़ेस्ट फ़ाइल को जोड़ा है।

2

सिर्फ Context.TELEPHONY_SERVICE में Context कीवर्ड निकालकर जाँच

TelephonyManager tManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 

String IMEI = tManager.getDeviceId(); 
8

इस कोड में जोड़ें:

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" /> 
0

[मामले में अगर किसी को भी अभी भी यहाँ ठोकर की तलाश में यह अभी भी मौजूदा आयु के पुराने समाधान]

AFAIK, TelephonyManager.getLine1Number() ऑपरेटरों से विभिन्न बाधाओं के कारण विश्वसनीय नहीं है। कुछ जावा प्रतिबिंब आधारित हैक्स हैं लेकिन डिवाइस से डिवाइस में भिन्न होते हैं, इस प्रकार उन हैक्स को बेकार बनाते हैं [कम से कम समर्थित मॉडलों के मामले में]

लेकिन यदि आपको वास्तव में आवश्यकता है तो नंबर खोजने के लिए एक वैध वैध तर्क है इसलिए। एसएमएस प्रदाता द्वारा सभी एसएमएस पूछें और "टू" नंबर प्राप्त करें।

इस चाल के अतिरिक्त लाभ: 1. यदि डिवाइस में बहु सिम है तो आप सभी लाइन नंबर प्राप्त कर सकते हैं।

विपक्ष: 1. आपको एसएमएस_READ अनुमति की आवश्यकता होगी [इसके लिए खेद है] 2. आपको डिवाइस में कभी भी उपयोग की जाने वाली सभी सिम संख्याएं मिलेंगी। इस समस्या को कुछ बाधा तर्क के साथ कम किया जा सकता है उदा। समय सीमा (एसएमएस प्राप्त या केवल आज भेजा गया) आदि। इस मामले में सुधार करने के बारे में दूसरों से सुनना दिलचस्प होगा।

4

कोड के टुकड़े के नीचे आज़माएं जिससे यह आपको डिवाइस 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"/> 
संबंधित मुद्दे