2012-02-21 8 views
5

मैं एक एंड्रॉइड एप्लिकेशन बनाना चाहता हूं जो मौजूदा कॉलर से प्री-निर्धारित टेक्स्ट संदेश के माध्यम से संपर्क कर सकता है। एक टेक्स्ट संदेश भेजना काफी आसान है लेकिन स्टैंडअलोन एप्लिकेशन में वर्तमान कॉलर का फोन नंबर चुनना चुनौती है। क्या फ़ोन नंबर पर दिव्य करने का कोई आसान तरीका है, इसलिए मैं कॉल पर रहते हुए उन्हें एक संदेश भेज सकता हूं?स्टैंड-अलोन एप्लिकेशन में वर्तमान कॉलर का फ़ोन नंबर कैसे निर्धारित करें

बेशक ऐसा करने के मैन्युअल तरीके हैं: संख्या लिखें, इसे एक नए टेक्स्ट संदेश में कुंजी दें, संदेश दर्ज करें। लेकिन मैं संदेश को आगे परिभाषित करना चाहता हूं और इसे "वर्तमान कॉलर को भेजना" चाहता हूं।

+0

कृपया वास्तव में आपने जो भी प्रयास किया है उस पर कुछ कोड छोड़ दें। क्या काम नहीं करता है? मेरे उदाहरण चाल चलते हैं। – EGHDK

उत्तर

4
@Override 
public void onReceive(Context context, Intent intent) { 

    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
    PhoneCallStateListener customPhoneListener = new PhoneCallStateListener(context); 
    telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE); 
    helper = new ContactDatabaseHelper(context); 
    list = helper.getAllContacts(); 

    try{ 
     incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 

     if (list.size() != 0){ 
      for (int i = 0, size = list.size(); i < size; i++){ 
       if (PhoneNumberUtils.compare(incomingNumber, list.get(i).getContactNumber())){     
        ToastMsg.showToast(context,list.get(i).getContactName()+" Calling"); 
       } 
      } 
     } 


    }catch (Exception e) { 
     // TODO: handle exception 
    } 

} 


public class PhoneCallStateListener extends PhoneStateListener{ 
private Context context; 

public PhoneCallStateListener(Context context){ 
    this.context = context; 
} 

@Override 
public void onCallStateChanged(int state, String incomingNumber) { 

    switch (state) { 

     case TelephonyManager.CALL_STATE_RINGING:  


      break; 
     case PhoneStateListener.LISTEN_CALL_STATE: 

    } 
    super.onCallStateChanged(state, incomingNumber); 
} 
} 
+0

क्या इसका मतलब यह नहीं है कि इन कॉल राज्यों को रोकने के लिए ऐप को हर समय लोड करने की आवश्यकता होगी? –

+2

@ enforcer-99 मुझे नहीं लगता कि आप BroadcastReciever की अवधारणा को समझते हैं। यहां स्टैक ओवरफ्लो का विवरण दिया गया है: "ब्रॉडकास्ट रिसीवर एक एंड्रॉइड घटक है जो सिस्टम-व्यापी प्रसारण घोषणाओं का जवाब देता है।" और यहां Google का लिंक है कि आपको * वास्तव में * पढ़ना चाहिए। इसलिए ... आप एक सिस्टम व्यापक प्रसारण का जवाब दे रहे हैं, और आपका ऐप "हर समय लोड नहीं होता" है। – EGHDK

3

आपके सिस्ट्यूएशन के लिए सबसे अच्छा मैं सोच सकता हूं कि PhoneStateListener का उपयोग करना है। इसमें onCallStateChanged हैंडलर शामिल है। तर्कों में से एक एक स्ट्रिंग है जिसमें आने वाली फोन नंबर है।

स्रोत: http://developer.android.com/reference/android/telephony/PhoneStateListener.html

Ctrl + F और "आवक" टाइप करें और तुम सब कुछ आप जानना चाहते हैं मिल जाएगा।

संपादित करें: यह सुनिश्चित करने के लिए कि आप अपने फोन के स्टार्टअप पर ऐप शुरू करते हैं, बस ब्रॉडकास्ट रिसीवर जोड़ें। How to start an Application on startup?

+0

लेकिन उस मामले के बारे में क्या है जहां उपयोगकर्ता ऐप का आह्वान नहीं करता है जब तक कि फोन कॉल पहले से ही प्रगति पर नहीं है? चूंकि कोई राज्य परिवर्तन कार्यक्रम नहीं होगा - मैं संख्या सही नहीं कर पाऊंगा? –

+0

लगता है जैसे आपको स्टार्टअप पर शुरू करने के लिए अपने ऐप की आवश्यकता होगी। यह "Google वॉलेट" जैसे ऐप्स के समान है। जब मैं एक दुकान में जाता हूं और भुगतान करने के लिए अपने फोन को टैप करता हूं, तो मुझे इसे काम करने के लिए कभी भी Google वॉलेट खोलना नहीं पड़ता था। लेकिन, जब मैं अपना फोन चालू करता हूं और मेरी सूचनाओं को देखता हूं तो मुझे लगता है कि "Google वॉलेट प्रारंभ करना" वास्तव में तेज़ है और फिर यह दूर हो जाता है। अभी बहुत समय नहीं है, लेकिन शायद यह मदद करेगा: http://stackoverflow.com/questions/5290141/android-broadcastreceiver-on-startup – EGHDK

+0

क्या होगा यदि मैंने अभी एंड्रॉइड कॉल लॉग की जांच की है? यदि मैंने दिनांक डीईएससी द्वारा सूची को क्रमबद्ध किया है, तो क्या यह वर्तमान कॉल को दिखाएगा या कॉल कॉल के बाद कॉल लॉग पर वर्तमान कॉल को धक्का दिया जाएगा? –

1

अपने मैनिफेस्ट में ब्रॉडकास्ट रिसीवर पंजीकृत करें जो ACTION_PHONE_STATE_CHANGED पर सुनता है।

ब्रॉडकास्ट इरादा कार्रवाई इंगित करती है कि पर कॉल स्टेटस (सेलुलर) डिवाइस बदल गया है।

EXTRA_STATE अतिरिक्त नई कॉल स्थिति इंगित करता है। यदि नया राज्य RINGING है, तो दूसरा अतिरिक्त EXTRA_INCOMING_NUMBER स्ट्रिंग के रूप में आने वाले फ़ोन नंबर प्रदान करता है।

READ_PHONE_STATE अनुमति की आवश्यकता है।

यह संस्करण 1.0 में एक चिपचिपा प्रसारण था, लेकिन यह अब चिपचिपा नहीं है। इसके बजाय, वर्तमान कॉल स्थिति को सिंक्रनाइज़ करने के लिए getCallState() का उपयोग करें।

इस तरह आपको कॉल प्राप्त करने से पहले उपयोगकर्ता को अपना ऐप लॉन्च करने की आवश्यकता नहीं है।

+0

इसके बारे में क्या? : "एंड्रॉइड 3.1 के रूप में एंड्रॉइड सिस्टम डिफ़ॉल्ट रूप से सभी ब्रॉडकास्ट रिसीवर को इरादे प्राप्त करने से बाहर कर देगा यदि संबंधित एप्लिकेशन उपयोगकर्ता द्वारा कभी भी शुरू नहीं किया गया है या यदि उपयोगकर्ता ने एंड्रॉइड मेनू (एप्लिकेशन प्रबंधित करने के माध्यम से) को एप्लिकेशन को स्पष्ट रूप से बंद कर दिया है। यह एक अतिरिक्त सुरक्षा विशेषताएं है क्योंकि उपयोगकर्ता यह सुनिश्चित कर सकता है कि केवल उनके द्वारा शुरू किए गए एप्लिकेशन प्रसारण उद्देश्यों को प्राप्त करेंगे। " –

संबंधित मुद्दे