如何在 Android 上阅读收到的彩信和短信 [英] How to read incoming MMS and SMS messages on Android

查看:44
本文介绍了如何在 Android 上阅读收到的彩信和短信的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道这是一个很大的话题,如此处所示这里,所以我只想发布如何我使用 Xamarin.Forms 在 Android 9.0 版本 28+ 上解决了接收传入 MMS 和 SMS 消息的问题以及从这些 MMS 和 SMS 消息中获取数据的问题.这段代码可以很容易地翻译成 Java.这里是完整的 Android 应用,您可以自己尝试一下.如果您对此感兴趣,它还展示了如何进行一些 Azure 机器学习.

I know this is a big topic, as seen here and here, so I just wanted to post how I solved both the issue of receiving incoming MMS and SMS messages and the issue of grabbing data from those MMS and SMS messages on Android 9.0 version 28+ using Xamarin.Forms. This code can easily be translated to Java. Here is the completed Android app so you can try it yourself. It also shows how to do some Azure machine learning if you're interested in that.

对于广播接收器:注册类实例 , 需要权限.

For Broadcast Receivers: Classes, registering class instances , permissions needed.

请注意,广播接收器是动态添加的,可以使用 Xamarin 的意图过滤器装饰器或(如果您不使用 Xamarin)AndroidManifest.xml 文件静态添加它们.

Note that the broadcast receivers were added dynamically, they can be added statically using Xamarin's intent-filter decorator , or (if you're not using Xamarin) the AndroidManifest.xml file.

推荐答案

这是一个代码片段,展示了如何使用广播接收器解析传入的 SMS 数据:

Here is a code snippet to show how to parse incoming SMS data with a Broadcast Receiver:

public override void OnReceive(Context context, Intent intent)
    {
        Log.Info(TAG, "Intent action received: " + intent.Action);

        // Retrieve message from the intent and analyze it.
        SmsMessage msg = Android.Provider.Telephony.Sms.Intents.GetMessagesFromIntent(intent)[0];
        string message = msg.DisplayMessageBody;
        (string, bool) result = MMSReceiver.CleanUpMessage(message);

        // If there were one or more rooster words.
        if (result.Item2)
        {
            string title = "Rooster Text Received From: " + msg.DisplayOriginatingAddress;
            DependencyService.Get<INotificationManager>().ScheduleNotification(title, result.Item1);
        }   
    }

这里是一段代码片段,展示了如何使用广播接收器解析传入的 MMS 数据:

And here is a code snippet to show how to parse incoming MMS data with a Broadcast Receiver:

public override void OnReceive(Context context, Intent intent)
    {
        Log.Info(TAG, "Intent action received: " + intent.Action);

        // Get the MMS ID. Adapted from: https://stackoverflow.com/questions/10065249/how-to-get-mms-id-android-application
        ContentResolver contentResolver = AndroidApp.Context.ContentResolver;
        Android.Net.Uri mmsInboxUri = Android.Net.Uri.Parse("content://mms");
        Android.Database.ICursor mmsInboxCursor = contentResolver.Query(mmsInboxUri, new string[]
            {"_id","msg_box","ct_t","date"}, "msg_box=1 or msg_box=2", null, null);
        int id = -1;
        if (mmsInboxCursor != null)
        {
            try
            {
                if (mmsInboxCursor.MoveToFirst())
                {
                    id = Int32.Parse(mmsInboxCursor.GetString(0));
                    Log.Info(TAG, "Id is this: " + mmsInboxCursor.GetString(0));
                }
            }
            catch (System.Exception error)
            {
                Log.Error(TAG, "Error requesting the MMS ID: " + error.Message);
            }
        }// if (mmsInboxCursor != null)

        // Get text and picture from MMS message. Adapted from: https://stackoverflow.com/questions/3012287/how-to-read-mms-data-in-android
        string message = ""; // text
        Android.Graphics.Bitmap bitmap = null; // picture
        string selectionPart = "mid=" + id;
        Android.Net.Uri mmsTextUri = Android.Net.Uri.Parse("content://mms/part");
        Android.Database.ICursor cursor = contentResolver.Query(mmsTextUri, null,
            selectionPart, null, null);
        if (cursor.MoveToFirst())
        {
            do
            {
                string partId = cursor.GetString(cursor.GetColumnIndex("_id"));
                string type = cursor.GetString(cursor.GetColumnIndex("ct"));
                // Get text.
                if ("text/plain".Equals(type))
                {
                    string data = cursor.GetString(cursor.GetColumnIndex("_data"));
                    
                    if (data != null)
                    {
                        message = GetMmsText(partId);
                        Log.Info(TAG, "Body is this: " + message);
                    }
                    else
                    {
                        message = cursor.GetString(cursor.GetColumnIndex("text"));
                        Log.Info(TAG, "Body is this: " + message);
                    }
                }
                //Get picture.
                if ("image/jpeg".Equals(type) || "image/bmp".Equals(type) ||
                        "image/gif".Equals(type) || "image/jpg".Equals(type) ||
                        "image/png".Equals(type))
                {
                    bitmap = GetMmsImage(partId);
                }
            } while (cursor.MoveToNext());
        }// if (cursor.MoveToFirst())
    }

这篇关于如何在 Android 上阅读收到的彩信和短信的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆