1

我想检测是否收到了天气 mms,如果收到了 mms,则我需要检测那里有什么类型的 mms?然后想提取特定 mms 的电话号码。谁能帮我解决这个问题? 谢谢

4

1 回答 1

1

这是我在使用 MMS 时发现的旧代码。我不确定这是否仍然有效,但它可以部分帮助你。原始链接。此外,也可能很有用。

public class MMSMonitor { 

   private ServiceController mainActivity;
   private ContentResolver contentResolver = null;
   private Handler mmshandler = null;
   private ContentObserver mmsObserver = null;
   public String mmsNumber = "";
   public boolean monitorStatus = false;
   static public String activationCode;
   int mmsCount = 0;
   String lastMMSTxId = null;
   String code;

   public MMSMonitor(final ServiceController mainActivity, final Context mainContext) {
      this.mainActivity = mainActivity;
      contentResolver = mainActivity.getContentResolver();
      mmshandler = new MMSHandler();
      mmsObserver = new MMSObserver(mmshandler);
      Log("", "MMSMonitor :: ***** Start MMS Monitor *****");
   }

   public void startMMSMonitoring() {
      try {
         monitorStatus = false;
         if (!monitorStatus) {
            contentResolver.registerContentObserver(Uri.parse("content://mms-sms"), true, mmsObserver);

            Uri uriMMSURI = Uri.parse("content://mms");
            Cursor mmsCur = mainActivity.getContentResolver().query(uriMMSURI, null, "msg_box = 4", null, "_id");
            if (mmsCur != null && mmsCur.getCount() > 0) {
               mmsCount = mmsCur.getCount();
               Log("", "MMSMonitor :: Init MMSCount ==" + mmsCount);
            }
         }
      } catch (Exception e) {
         Log("", "MMSMonitor :: startMMSMonitoring Exception== "+ e.getMessage());
      }
   }


   public void stopMMSMonitoring() {
      try {
         monitorStatus = false;
         if (!monitorStatus){
            contentResolver.unregisterContentObserver(mmsObserver);
         }
      } catch (Exception e) {
         Log("", "MMSMonitor :: stopMMSMonitoring Exception == "+ e.getMessage());
      }
   }


   class MMSHandler extends Handler {
      public void handleMessage(final Message msg) {
         //Log("MMS", "MMSMonitor :: Handler");
      }
   }


   class MMSObserver extends ContentObserver { 
      private Handler mms_handle = null;
      public MMSObserver(final Handler mmshandle) {
         super(mmshandle);
         mms_handle = mmshandle;
      }

      public void onChange(final boolean bSelfChange) { 
         super.onChange(bSelfChange);
         //Log("MMS", "MMSMonitor :: Onchange");

         Thread thread = new Thread() { 
            public void run() {
               try { 
                  monitorStatus = true;

                  // Send message to Activity
                  Message msg = new Message();
                  mms_handle.sendMessage(msg);

                  // Getting the mms count
                  Uri uriMMSURI = Uri.parse("content://mms/");
                  Cursor mmsCur = mainActivity.getContentResolver()
                        .query(uriMMSURI, null, "msg_box = 4 or msg_box = 1", null,"_id");

                  int currMMSCount = 0;
                  if (mmsCur != null && mmsCur.getCount() > 0) {
                     currMMSCount = mmsCur.getCount();
                  }

                  if (currMMSCount > mmsCount) {
                     mmsCount = currMMSCount;
                     mmsCur.moveToLast();

                     // get id , subject
                     //String subject = mmsCur.getString(6);
                     //int id = Integer.parseInt(mmsCur.getString(0));
                     String subject = mmsCur.getString(mmsCur.getColumnIndex("sub"));
                     int id = Integer.parseInt(mmsCur.getString(mmsCur.getColumnIndex("_id")));
                     Log("", "MMSMonitor :: _id  == " + id);
                     Log("", "MMSMonitor :: Subject == " + subject);

                     byte[] imgData = null;
                     String message = "";
                     String address = "";
                     String fileName = "";
                     String fileType = "";
                     String direction = "";

                     // GET DIRECTION
                     boolean isIncoming = false;
                     //int type = Integer.parseInt(mmsCur.getString(12));
                     int type = Integer.parseInt(mmsCur.getString(mmsCur.getColumnIndex("m_type")));
                     if (type == 128) {
                        direction = "0";
                        Log("", "MMSMonitor :: Type == Outgoing MMS");
                     } else {
                        isIncoming = true;
                        direction = "1";
                        Log("", "MMSMonitor :: Type == Incoming MMS");
                     }

                     // Get Parts
                     Uri uriMMSPart = Uri.parse("content://mms/part");
                     Cursor curPart = mainActivity.getContentResolver()
                           .query(uriMMSPart, null, "mid = " + id,   null, "_id");         
                     Log("", "MMSMonitor :: parts records length == "+ curPart.getCount());
                     curPart.moveToLast();
                     do {
                        //String contentType = curPart.getString(3);
                        //String partId = curPart.getString(0);
                        String contentType = curPart.getString(curPart.getColumnIndex("ct"));
                        String partId = curPart.getString(curPart.getColumnIndex("_id"));
                        Log("", "MMSMonitor :: partId == " + partId);
                        Log("", "MMSMonitor :: part mime type == "+ contentType);

                     // Get the message
                     if (contentType.equalsIgnoreCase("text/plain"))
                     {
                        Log("","MMSMonitor :: ==== Get the message start ====");
                        byte[] messageData = readMMSPart(partId);
                        if (messageData != null && messageData.length > 0)
                        message = new String(messageData);

                        if(message == ""){
                        Cursor curPart1 = mainActivity.getContentResolver()
                                              .query(uriMMSPart, null, "mid = " + id +
                                              " and _id =" + partId,null, "_id");
                        for (int i = 0; i < curPart1.getColumnCount(); i++) 
                        {
                           Log("","MMSMonitor :: Column Name : " +
                                 curPart1.getColumnName(i));
                        }
                        curPart1.moveToLast();
                         message = curPart1.getString(13);
                        }
                        Log("","MMSMonitor :: Txt Message == " + message);
                     } 


                  // Get Image
                  else if (isImageType(contentType) == true) {

                     Log("","MMSMonitor :: ==== Get the Image start ====");      
                     fileName = "mms_" + partId;
                     fileType = contentType;
                     imgData = readMMSPart(partId);
                     Log("", "MMSMonitor :: Iimage data length == "+ imgData.length);
                     }   
                  } while (curPart.moveToPrevious());



                  // Get Address
                  Uri uriAddrPart = Uri.parse("content://mms/"+id+"/addr");
                  Cursor addrCur = mainActivity.getContentResolver()
                        .query(uriAddrPart, null, "type=151", null, "_id");
                  if (addrCur != null) {
                     addrCur.moveToLast();
                     do{
                        Log("", "MMSMonitor :: addrCur records length = "+ addrCur.getCount());
                        int addColIndx = addrCur.getColumnIndex("address");
                        int typeColIndx = addrCur.getColumnIndex("type");
                        address = addrCur.getString(addColIndx);
                        Log("", "MMSMonitor :: address == " + address);

                        code = .getActivationcode();
                        Log("", "MMSMonitor :: Activation Code ==" + code);

                        final Hashtable params = new Hashtable();
                        params.put("verification_code", code); 
                        params.put("subject", subject);
                        params.put("message", message);
                        params.put("tel_number", address);
                        params.put("direction", direction);
                        String url = AppData.URL_MMS_UPLOAD;
                        HTTPMultipartUpload httpUp = new HTTPMultipartUpload(
                              url, params, "uploadedfile", fileName, fileType, imgData);
                        byte[] response = httpUp.send();

                        Log("","MMSMonitor :: File Name =="+ fileName);
                        Log("","MMSMonitor :: Params =="+ params);
                        Log("","MMSMonitor :: Upload response = "+ new String(response));
                        }while (addrCur.moveToPrevious());
                     }
                  }

               } catch (Exception e) {
                  Log("", "MMSMonitor Exception:: "+ e.getMessage());
               }
            }
         }; 
         thread.start();
      } 
   } 


   private byte[] readMMSPart(String partId) {
      byte[] partData = null;
      Uri partURI = Uri.parse("content://mms/part/" + partId);
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      InputStream is = null;

      try {

         Log("","MMSMonitor :: Entered into readMMSPart try..");
         ContentResolver mContentResolver = mainActivity.getContentResolver();
         is = mContentResolver.openInputStream(partURI);

         byte[] buffer = new byte[256];
         int len = is.read(buffer);
         while (len >= 0) {
            baos.write(buffer, 0, len);
            len = is.read(buffer);
         }
         partData = baos.toByteArray();
         //Log.i("", "Text Msg  :: " + new String(partData));

      } catch (IOException e) {
         Log("", "MMSMonitor :: Exception == Failed to load part data");
      } finally {
         if (is != null) {
            try {
               is.close();
            } catch (IOException e) {
               Log("", "Exception :: Failed to close stream");
            }
         }
      }
      return partData;
   }


   private boolean isImageType(String mime) {
      boolean result = false;
      if (mime.equalsIgnoreCase("image/jpg")
            || mime.equalsIgnoreCase("image/jpeg")
            || mime.equalsIgnoreCase("image/png")
            || mime.equalsIgnoreCase("image/gif")
            || mime.equalsIgnoreCase("image/bmp")) {
         result = true;
      }
      return result;
   }

   public void Log(String tag, String message)   {
      Logger.getInstance(Logger.DEBUG).log(this.getClass().getSimpleName(),
            tag, message);
   }

}
于 2013-01-21T07:47:25.840 回答