2009-11-18 23 views
7

मुझे पता है कि एसएमएस सामग्री प्रदाता सार्वजनिक एपीआई (कम से कम दस्तावेज नहीं) का हिस्सा नहीं है, लेकिन अगर मैं सही ढंग से समझता हूं तो अब तक कई एसएमएस सुविधाओं का उपयोग करना संभव है जब तक आप जानते हैं कि कैसे उपयोग करें एपीआई (?)।एंड्रॉइड एसएमएस एपीआई

उदा यह आपके इनबॉक्स में एक एसएमएस सम्मिलित करने के लिए बहुत सीधा है:

ContentValues values = new ContentValues(); 
values.put("address", "+457014921911"); 
contentResolver.insert(Uri.parse("content://sms"), values); 

दुर्भाग्य से यह मानक "नए-एसएमएस में अपने-इनबॉक्स" अधिसूचना ट्रिगर नहीं करता। क्या यह मैन्युअल रूप से ट्रिगर करना संभव है?

संपादित करें: एंड्रॉइड में "मानक मेल एप्लिकेशन (संदेश)" AFAIK एंड्रॉइड.permission.RECEIVE_SMS अनुमति का उपयोग कर आने वाले एसएमएस के लिए सुन रहा है। और फिर, जब कोई नया एसएमएस आ गया है, तो एक स्टेटस बार अधिसूचना "विशेष" अधिसूचना आईडी के साथ डाली जाती है। तो मेरी समस्या का एक समाधान (ऊपर वर्णित) खोजने के लिए, और सही प्रसारण इरादा भेज सकता है; कुछ "नया एसएमएस अर्जित किया गया है" - कुछ।

संपादित करें: एंड्रॉइड बाजार से एक तृतीय पक्ष संदेश एप्लिकेशन (chompsms) डाउनलोड किया गया। यह एप्लिकेशन मेरी आवश्यकताओं को बेहतर ढंग से पूरा करता है। जब मैं chompsms के ऊपर कोड निष्पादित करता हूं तो नए एसएमएस को नोटिस करता है और "मानक स्थिति बार अधिसूचना" दिखाता है। तो मैं कहूंगा कि मानक एंड्रॉइड मैसेजिंग एप्लिकेशन एसएमएस का सही ढंग से पता नहीं लगा रहा है? या मैं गलत हूँ?

उत्तर

6

दुर्भाग्य कोड इन सूचनाओं के लिए जिम्मेदार messaging application में छिपा हुआ है।

PathClassLoader c = new PathClassLoader("/system/app/Mms.apk", getClassLoader()); 
Class.forName("com.android.mms.util.ContactInfoCache", true, c) 
    .getMethod("init", Context.class).invoke(null, context); 
Class.forName("com.android.mms.transaction.MessagingNotification", true, c) 
    .getMethod("updateAllNotifications", Context.class).invoke(null, context); 

This कई कारणों से स्पष्ट रूप से एक very bad idea है, लेकिन मैं एक और तरीका है कि तुम क्या वर्णित करने के लिए नहीं सोच सकते हैं: कक्षा MessagingNotification एक static विधि updateAllNotifications है कि आप एक PathClassLoader और प्रतिबिंब का उपयोग कर कह सकते हैं है।

0

शायद तुम बदलना चाहिए

content://sms 

content://sms/inbox 
+2

कोई फर्क नहीं पड़ता; इनबॉक्स में एसएमएस दिखाई देता है। लेकिन अभी भी कोई अच्छा एसएमएस अधिसूचना :) - – Schildmeijer

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