title: Receiving MMS in android application
body: <p>I've to develop an android application and one of its activity is:</p>
  
  <ol>
  <li>Detecting New MMS messages</li>
  <li>Get Sender number to check if it is the number i want to receive from it in my application</li>
  <li>Getting (txt + image) from MMS</li>
  <li>Showing (Txt + Image) data in ListView</li>
  </ol>
  
  <p>well, I found a code that might help me in the 2nd and 3rd tasks 
  but i tried it and test it on my mobile and it is work but it did not retrieve anything just black interface!!!</p>
  
  <p>Maybe the problem that i didn't understand some part of this code, </p>
  
  <p>I wrote my comment above each statement that I couldn't understand it please answer my comments that inside the code and help me to understand what i am missing
  hope to get ur responses early. and please be clear.</p>
  
  <pre><code>   import java.io.BufferedReader;
     import java.io.IOException;
     import java.io.InputStream;
     import java.io.InputStreamReader;
     import java.text.MessageFormat;
  
     import android.app.Activity;
     import android.content.ContentResolver;
     import android.content.ContentValues;
     import android.content.Context;
     import android.database.Cursor;
     import android.graphics.Bitmap;
     import android.graphics.BitmapFactory;
     import android.net.Uri;
     import android.os.Bundle;
     import android.telephony.SmsMessage;
     import android.view.LayoutInflater;
     import android.view.View;
     import android.view.ViewGroup;
     import android.widget.ImageView;
     import android.widget.ListView;
     import android.widget.TextView;
       import android.app.Activity;
       import android.os.Bundle;
  
     public class MMSReceiverActivity extends Activity {
  
    private final Uri CONTENT_URI_PART = Uri.parse("content://mms/part");
     private static final String MSG_ID_STR = "mid=%1$s"; // I don't understand it
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
  
      // Start Copying Code
      // I don't know how can I retrieve mms id
      long msg_id = this.getIntent().getLongExtra("msg_id", 0);
      // What's different between ViewGroup and ListView
      ViewGroup listview = (ViewGroup) findViewById(R.id.mmsdetaillist);
      // What's different between "content://mms/part" and "content://mms/"
      Cursor cursor = getContentResolver().query(CONTENT_URI_PART, null,
              String.format(MSG_ID_STR, msg_id), null, null);
  
      if (cursor.moveToFirst()) {
          do {
              // Why he puts partID
              String partId = cursor.getString(cursor.getColumnIndex("_id"));
              String type = cursor.getString(cursor.getColumnIndex("ct"));
  
              if ("text/plain".equals(type)) {
                  String data = cursor.getString(cursor
                          .getColumnIndex("_data"));
                  String body;
                  // What's the different between if it's null or not all of
                  // them will return (text)
                  if (data != null) {
                      // implementation of this method below
                      body = getMmsText(partId);
                  } else {
                      body = cursor.getString(cursor.getColumnIndex("text"));
                  }
  
                  // Why he declared it like this i mean why it didn't declare
                  // like this findViewById (R.) etc
                  TextView t = new TextView(this);
                  t.setText(body);
                  listview.addView(t);
  
                  // Why here else ?? it should be only if because if MMS
                  // contains Text + img : so it'll ignore the (else = img)
                  // part !
  
              } else if ("image/jpeg".equals(type)
                      || "image/bmp".equals(type) || "image/gif".equals(type)
                      || "image/jpg".equals(type) || "image/png".equals(type)) {
                  Bitmap bitmap = getMmsImage(partId);
                  ImageView iv = new ImageView(this);
                  iv.setImageBitmap(bitmap);
                  listview.addView(iv);
              }
          } while (cursor.moveToNext());
      }
      cursor.close();
  
  }
  
  public String getMmsText(String id) {
      Uri partURI = Uri.parse("content://mms/part/" + id);
      InputStream is = null;
      StringBuilder sb = new StringBuilder();
      try {
          is = getContentResolver().openInputStream(partURI);
          if (is != null) {
              InputStreamReader isr = new InputStreamReader(is, "UTF-8");
              BufferedReader reader = new BufferedReader(isr);
              String temp = reader.readLine();
              while (temp != null) {
                  sb.append(temp);
                  temp = reader.readLine();
              }
          }
      } catch (IOException e) {
      } finally {
          if (is != null) {
              try {
                  is.close();
              } catch (IOException e) {
              }
          }
      }
      return sb.toString();
  }
  
  public Bitmap getMmsImage(String _id) {
      Uri partURI = Uri.parse("content://mms/part/" + _id);
      InputStream is = null;
      Bitmap bitmap = null;
      try {
          is = getContentResolver().openInputStream(partURI);
          bitmap = BitmapFactory.decodeStream(is);
      } catch (IOException e) {
      } finally {
          if (is != null) {
              try {
                  is.close();
              } catch (IOException e) {
              }
          }
      }
      return bitmap;
  }
   }
  </code></pre>
  
  <p>Note: everyTime i search on sending or receiving MMS i got this link , But until now i do not get it</p>
  
  <p>Should i use repo and Git?
  and what is repo and Git?
  why should i use in MMS?</p>
  
  <p>should i use it when send and receive MMS? if yes for why?
  can i use this code</p>
  
  <pre><code> content://mms-sms/conversations
  </code></pre>
  
  <p>instead of repo and git?</p>
  
  <p><a href="http://source.android.com/source/downloading.html" rel="nofollow noreferrer">repo and Git</a></p>