2010-09-08 13 views
6

में मिस्ड कॉल के लिए प्रसारण रिसीवर क्या किसी को पता है कि मिस्ड कॉल के इरादे क्या हैं। असल में मैं अपने आवेदन में मिस्ड कॉल और इनकमिंग कॉल पर एसएमएस भेजना चाहता हूं।एंड्रॉइड

उत्तर

10

मिस्ड कॉल, AFAIK के लिए कोई विशिष्ट प्रसारण नहीं है।

आप ACTION_PHONE_STATE_CHANGED प्रसारण के लिए देख सकते हैं, EXTRA_STATE_RINGING से EXTRA_STATE_IDLE करने के लिए फोन की पाली तक इंतजार, फिर CallLog सामग्री प्रदाता की जाँच देखने के लिए कि कॉल छूट गया था की कोशिश करो। मैंने इस तकनीक की कोशिश नहीं की है, लेकिन यह काम कर सकता है।

+0

@ CommonsWare-कर सकते हैं हम मिस्ड कॉल और अस्वीकृत कॉल के बीच अंतर की वजह से दोनों में समारोह उपरोक्त तरीके से !!! –

11

आप आप सिर्फ यह करने की आवश्यकता अपने अनुप्रयोग से एक ContentObserver

public class MissedCallsContentObserver extends ContentObserver 
{ 
    public MissedCallsContentObserver() 
    { 
     super(null); 
    } 

    @Override 
    public void onChange(boolean selfChange) 
    { 
     Cursor cursor = getContentResolver().query(
      Calls.CONTENT_URI, 
      null, 
      Calls.TYPE + " = ? AND " + Calls.NEW + " = ?", 
      new String[] { Integer.toString(Calls.MISSED_TYPE), "1" }, 
      Calls.DATE + " DESC "); 

     //this is the number of missed calls 
     //for your case you may need to track this number 
     //so that you can figure out when it changes 
     cursor.getCount(); 

     cursor.close(); 
    } 
} 

उपयोग करने की आवश्यकता,:

MissedCallsContentObserver mcco = new MissedCallsContentObserver(); 
getApplicationContext().getContentResolver().registerContentObserver(Calls.CONTENT_URI, true, mcco); 
+0

हाय, मैं जानना चाहता हूं कि क्या आपने जानबूझकर 'cursor.close()' छोड़ा है? जैसे यह आवश्यक नहीं है क्योंकि 'ContentObserver' स्वचालित रूप से बंद हो जाएगा? – lock

+0

अच्छा सवाल। मैंने जानबूझकर इसे बाहर नहीं छोड़ा, यह वहां होना चाहिए। मैं अपना जवाब अपडेट करूंगा। – Joe