마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

MMS Receiver를 구현하려고 하는데,

0 추천
구글링은 한 결과, MMS Receive를 할 때, PduParser라는 클래스와 PduHeader, PduBody 클래스를 사용하여

수신되어온 MMS 정보를 읽더군요.

 

근데, 아무리 찾아봐도 PduParser 라이브러리를 찾을 수가 없습니다;

어디서 찾을 수 있나요?
익명사용자 님이 2014년 6월 14일 질문

1개의 답변

0 추천

PduParser는 안드로이드 소스에 포함된거라서 쓸 수가 없어요. 

http://susemi99.kr/664

 

public class MMSReceiver extends BroadcastReceiver
{
  private Context _context;

  @Override
  public void onReceive(Context $context, final Intent $intent)
  {
    _context = $context;

    Runnable runn = new Runnable()
    {
      @Override
      public void run()
      {
        parseMMS();
      }
    };
    Handler handler = new Handler();
    handler.postDelayed(runn, 6000); // 시간이 너무 짧으면 못 가져오는게 있더라 
  }

  private void parseMMS()
  {
    ContentResolver contentResolver = _context.getContentResolver();
    final String[] projection = new String[] { "_id" };
    Uri uri = Uri.parse("content://mms");
    Cursor cursor = contentResolver.query(uri, projection, null, null, "_id desc limit 1");

    if (cursor.getCount() == 0)
    {
      cursor.close();
      return;
    }

    cursor.moveToFirst();
    String id = cursor.getString(cursor.getColumnIndex("_id"));
    cursor.close();

    String number = parseNumber(id);
    String msg = parseMessage(id);
    Log.i("MMSReceiver.java | parseMMS", "|" + number + "|" + msg);
  }

  private String parseNumber(String $id)
  {
    String result = null;

    Uri uri = Uri.parse(MessageFormat.format("content://mms/{0}/addr", $id));
    String[] projection = new String[] { "address" };
    String selection = "msg_id = ? and type = 137";// type=137은 발신자
    String[] selectionArgs = new String[] { $id };

    Cursor cursor = _context.getContentResolver().query(uri, projection, selection, selectionArgs, "_id asc limit 1");

    if (cursor.getCount() == 0)
    {
      cursor.close();
      return result;
    }

    cursor.moveToFirst();
    result = cursor.getString(cursor.getColumnIndex("address"));
    cursor.close();

    return result;
  }
  
  private String parseMessage(String $id)
  {
    String result = null;
    
    // 조회에 조건을 넣게되면 가장 마지막 한두개의 mms를 가져오지 않는다.
    Cursor cursor = _context.getContentResolver().query(Uri.parse("content://mms/part"), new String[] { "mid", "_id", "ct", "_data", "text" }, null, null, null);
    
    Log.i("MMSReceiver.java | parseMessage", "|mms 메시지 갯수 : " + cursor.getCount() + "|");
    if (cursor.getCount() == 0)
    {
      cursor.close();
      return result;
    }
    
    cursor.moveToFirst();
    while (!cursor.isAfterLast())
    {
      String mid = cursor.getString(cursor.getColumnIndex("mid"));
      if ($id.equals(mid))
      {
        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"));
          
          if (TextUtils.isEmpty(data))
            result = cursor.getString(cursor.getColumnIndex("text"));
          else
            result = parseMessageWithPartId(partId);
        }
      }
      cursor.moveToNext();
    }
    cursor.close();
    
    return result;
  }
  
  
  private String parseMessageWithPartId(String $id)
  {
    Uri partURI = Uri.parse("content://mms/part/" + $id);
    InputStream is = null;
    StringBuilder sb = new StringBuilder();
    try
    {
      is = _context.getContentResolver().openInputStream(partURI);
      if (is != null)
      {
        InputStreamReader isr = new InputStreamReader(is, "UTF-8");
        BufferedReader reader = new BufferedReader(isr);
        String temp = reader.readLine();
        while (!TextUtils.isEmpty(temp))
        {
          sb.append(temp);
          temp = reader.readLine();
        }
      }
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }
    finally
    {
      if (is != null)
      {
        try
        {
          is.close();
        }
        catch (IOException e)
        {
        }
      }
    }
    return sb.toString();
  }
}

 

쎄미 (162,410 포인트) 님이 2014년 6월 18일 답변
...