日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android mms 广播,Android-如何成为第一个接收WAP PUSH(MMS)的人

發(fā)布時間:2023/12/10 Android 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android mms 广播,Android-如何成为第一个接收WAP PUSH(MMS)的人 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這個話題似乎不太受歡迎!

我試圖自己回答這個問題,發(fā)現(xiàn)一些有趣的事情.

分析

SMS和MMS接收主要在文件InboundSmsHandler.java中進行管理.

該文件以注釋塊開頭,該注釋塊解釋了SMS / MMS接收狀態(tài)機.

這是此注釋的摘要,并帶有解釋:

>狀態(tài)機以InboundSmsHandler.IdleState狀態(tài)啟動.

>當SMSDispatcher從無線電接收到新的SMS時,它將調用dispatchNormalMessage(com.android.internal.telephony.SmsMessageBase),該狀態(tài)將轉換為InboundSmsHandler.DeliveringState狀態(tài).

>從InboundSmsHandler.DeliveringState狀態(tài),調用processMessagePart(InboundSmsTracker tracker).在此方法中,如果SMS的目標端口號是SmsHeader.PORT_WAP_PUSH(換句話說,如果SMS是MMS),則調用WapPushOverSms.dispatchWapPdu(byte [] pdu,BroadcastReceiver接收器,InboundSmsHandler處理程序)方法.

>在dispatchWapPdu方法內部,它們調用InboundSmsHandler.dispatchIntent(意圖意圖,字符串許可權,int appOp,BroadcastReceiver resultReceiver,UserHandle用戶).他們會檢查是否存在默認的MMS應用程序,如果是這樣,則將意圖配置為僅傳遞給該應用程序.

碼:

// Direct the intent to only the default MMS app. If we can't find a default MMS app

// then sent it to all broadcast receivers.

ComponentName componentName = SmsApplication.getDefaultMmsApplication(mContext, true);

if (componentName != null) {

// Deliver MMS message only to this receiver

intent.setComponent(componentName);

if (DBG) Rlog.v(TAG, "Delivering MMS to: " + componentName.getPackageName() +

" " + componentName.getClassName());

}

handler.dispatchIntent(intent, permission, appOp, receiver, UserHandle.OWNER);

>在dispatchIntent內部,我們有所需的內容,即對Context.sendOrderedBroadcastAsUser(…)的調用.因此,正是這種方法將WAP_PUSH_DELIVER_ACTION廣播作為有序廣播發(fā)送.

>也通過位于InboundSmsHandler.java中的SmsBroadcastReceiver.onReceive(Context context,Intent intent)處理程序來處理此廣播(默認應用程序和SmsBroadcastReceiver).在此處理程序內部,處理WAP_PUSH_DELIVER_ACTION案例.該意圖更改為WAP_PUSH_RECEIVED_ACTION,并通過InboundSmsHandler.dispatchIntent(意圖意圖,字符串權限,int appOp,BroadcastReceiver resultReceiver,UserHandle用戶)方法再次廣播.這次,不僅涉及默認應用程序,而且涉及所有感興趣的應用程序.

碼:

@Override

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

if (action.equals(Intents.SMS_FILTER_ACTION)) {

// ...

} else if (action.equals(Intents.SMS_DELIVER_ACTION)) {

// ...

} else if (action.equals(Intents.WAP_PUSH_DELIVER_ACTION)) {

// Now dispatch the notification only intent

intent.setAction(Intents.WAP_PUSH_RECEIVED_ACTION);

intent.setComponent(null);

// Only the primary user will receive notification of incoming mms.

// That app will do the actual downloading of the mms.

dispatchIntent(intent, android.Manifest.permission.RECEIVE_SMS,

AppOpsManager.OP_RECEIVE_SMS, this, UserHandle.OWNER);

} else {

// ...

}

}

結論(對原始問題的快速解答)

收到MMS時,首先將WAP_PUSH_DELIVER_ACTION廣播到默認應用程序,然后是WAP_PUSH_RECEIVED_ACTION.

兩種廣播都是有序廣播,這意味著可以使用優(yōu)先級.

好吧,這對我來說是個壞消息,因為這也意味著我不能成為第一個收到傳入MMS通知的人,并且在通知MMS應用程序之前先打開模塊化數(shù)據(jù).

因此,我必須尋找另一種方式來做到這一點.

總結

以上是生活随笔為你收集整理的android mms 广播,Android-如何成为第一个接收WAP PUSH(MMS)的人的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。