मैं भी इस सवाल की जांच पर कुछ समय बिताया। और ऐसा लगता है कि ऐसा करने के लिए कोई सार्वजनिक एपीआई नहीं है। लेकिन मैं अपने रिवर्स इंजीनियरिंग अनुसंधान से कुछ परिणाम साझा कर सकते हैं ...
मेरे सैमसंग गैलक्सी एस सीबी संदेश प्राप्त करने में सक्षम है, तो मैं SMS एप्लिकेशन decompiled और कोड में देखा।
<receiver android:name=".transaction.PrivilegedSmsReceiver">
...
<intent-filter>
<action android:name="android.provider.Telephony.CB_RECEIVED" />
</intent-filter>
<intent-filter>
<action android:name="android.provider.Telephony.CB_SETTINGS_AVAILABLE" />
</intent-filter>
<intent-filter>
<action android:name="android.provider.Telephony.SET_CB_ERR_RECEIVED" />
</intent-filter>
<intent-filter>
<action android:name="android.provider.Telephony.GET_CB_ERR_RECEIVED" />
</intent-filter>
</receiver>
नोट android.provider.Telephony.CB_RECEIVED
आशय फिल्टर: यह अपने मैनिफ़ेस्ट फ़ाइल में निम्नलिखित BroadcastReceiver
है। मुझे इसके बारे में कोई दस्तावेज नहीं मिला, लेकिन इसके नाम से मैंने माना कि यह एकमात्र प्रसारण है जिसे मुझे अभी पकड़ने की जरूरत है।
फिर मैंने डीकंपिल्ड एपीके के कोड के माध्यम से खोज की और पाया कि यह android.provider.Telephony.Sms.Intents->getCbMessagesFromIntent()
इंटरफ़ेस का उपयोग सीबी संदेशों को पुनर्प्राप्त करने के लिए करता है, जो CbMessage
क्लास इंस्टेंस देता है। इस इंटरफेस भी सरल एसएमएस संदेश के लिए पुरानी है, तो मैं मान लिया है कि CbMessage
साथ pdus
SmsMessage
के रूप में करता है काम करना चाहिए। अंततः मुझे source of SmsCbMessage
कक्षा मिली जो एपीआई द्वारा SmsMessage
के समान ही है। यह 5-6 आंतरिक एंड्रॉइड जावा फाइलों पर निर्भर करता है, इसलिए सादगी के लिए मैं उन्हें एक ही साइट से पकड़ता हूं और उन्हें अपनी परियोजना में शामिल करता हूं। broadcastReceiver
वर्ग SmsMessage
SmsCbMessage
की जगह को छोड़कर तुम्हारा रूप में ही है:
public class CbReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//---get the CB message passed in---
Bundle bundle = intent.getExtras();
SmsCbMessage[] msgs = null;
String str = "";
if (bundle != null) {
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsCbMessage[pdus.length];
for (int i=0; i<msgs.length; i++) {
msgs[i] = SmsCbMessage.createFromPdu((byte[])pdus[i]);
str += "CB lang " + msgs[i].getLanguageCode();
str += " :";
str += msgs[i].getMessageBody().toString();
str += "\n";
}
//---display the new CB message---
abortBroadcast();
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
}
}
}
ऊपर रिसीवर के साथ मेरी एसजीएस फोन में अपने आवेदन को स्थापित करने, और फोन एसएमएस आवेदन में सीबी संदेश प्राप्त सक्रिय करने के बाद, मेरे ऐप था मानक एसएमएस एप्लिकेशन द्वारा प्राप्त करने के साथ समानांतर में टोस्ट में सीबी संदेशों को दिखाने में सक्षम।
क्या आपको एक पुश सूचना, या की तरह सेल प्रसारण संदेश मतलब है, ...? – Jakar
@ जाकर - [सेल ब्रॉडकास्ट] (http://en.wikipedia.org/wiki/Cell_Broadcast) – GrAnd