2011-02-15 6 views
17

誰も私にこれを手伝ってもらえますか?アンドロイドの新着メッセージのメッセージコンテンツを読むにはどうすればいいですか?

新しい着信SMSのメッセージ本文をプログラムでアンドロイドで読んでみたいと思います。完全に私はこの

のために1ヶ月を無駄にするので

Uri uri = Uri.parse("content://sms/inbox"); 
     ContextWrapper context = null;  
     Cursor c = context.getContentResolver().query(uri, null, null ,null,null);  
     String body = null; 
     String number=null; 
     if(c.moveToFirst()) {   
      body = c.getString(c.getColumnIndexOrThrow("body")).toString(); 
      number = c.getString(c.getColumnIndexOrThrow("address")).toString(); 
     } 
     c.close(); 

が は、いずれかが私に答えを教えてください私のコードでのエラーくださいです:

は、私がどんな内容を返さないことが、何かを試してみました

+0

良い記事はこちら:http://mobdev.olin.edu/mobdevwiki/FrontPage/Tutorials/SMS%20Messaging –

+0

http://stackoverflow.com/questions/14097500/get-inbox-messages-from-android-device表示するカスタムリストビュー# それは私のために働く。 StackOverflowでこの男のanwser – texeratx

答えて

21

私のクラスのウェブサイトにこれに関するいくつかのサンプルプログラムを掲載しました。 ここに例がありますRead SMS Example コードのスニペットです。基本的には、SMS_Receiveを待ち受けるためにブロードキャストレシーバーを登録し、以下をチェックアウトすることができます。以下は

Intent intent = getIntent(); 
    Bundle bundle = intent.getBundleExtra("mySMS"); 

    if (bundle != null) { 
     Object[] pdus = (Object[])bundle.get("pdus"); 
     SmsMessage sms = SmsMessage.createFromPdu((byte[])pdus[0]); 
     Log.i("mobile.cs.fsu.edu", "smsActivity : SMS is <" + sms.getMessageBody() +">"); 

     //strip flag 
     String message = sms.getMessageBody(); 
     while (message.contains("FLAG")) 
      message = message.replace("FLAG", ""); 

     TextView tx = (TextView) findViewById(R.id.TextBox); 
     tx.setText(message);    
    } else 
     Log.i("mobile.cs.fsu.edu", "smsActivity : NULL SMS bundle"); 
+0

働いて大変ありがとうフランク – Krishna

+1

このコードはとてもシンプルでエレガントです。ありがとう! – Simon

+0

'SmsMessage'配列(APIレベル19以降)を返すstatic' getMessagesFromIntent(Intent) 'メソッドもあります。ターゲットレベルが十分に高い場合は、" pdus "バイト配列の手動読み込み/キャストは必要ないかもしれません:https://developer.android.com/reference/android/provider/Telephony.Sms.Intents.html#getMessagesFromIntent(android.content.Intent) – Blacklight

4

リストビューでの受信メッセージと表示を読み取ったコードの一部である、ドンは、」マニフェストファイルにアクセス権を追加することを忘れ:ここ

<uses-permission android:name="android.permission.READ_SMS"/> 

コード:

listitem=(ListView)findViewById(R.id.ListView); 

     Uri mSmsQueryUri = Uri.parse("content://sms/inbox"); 
     List<String> messages = new ArrayList<String>(); 

     Cursor cursor = null; 
     try { 
      cursor = getContentResolver().query(mSmsQueryUri, null, null, null, null); 
      if (cursor == null) { 
       Log.i(TAG, "cursor is null. uri: " + mSmsQueryUri); 

      } 
      for (boolean hasData = cursor.moveToFirst(); hasData; hasData = cursor.moveToNext()) { 
       final String body = cursor.getString(cursor.getColumnIndexOrThrow("body")); 
       messages.add(body); 
      } 
     } catch (Exception e) { 
      Log.e(TAG, e.getMessage()); 
     } finally { 
      cursor.close(); 
     } 

     listitem.setAdapter(new ArrayAdapter<String>(ReadMessage.this, android.R.layout.simple_list_item_1,messages)); 
+0

今日はすべてのメッセージを受信するのではなく、今日のメッセージだけを受け取ることができますか? –

0

この例では、最近受け取った(受信した)SMSを受信トレイから読み取ってテキストビューで表示する方法を説明します。

fstmsgBtn.setOnClickListener(new OnClickListener() 

    { public void onClick(View v) 
    { 
     Uri my_uri = Uri.parse("content://sms/inbox");   
     Cursor readFstSms =v.getContext().getContentResolver().query(my_uri, null, null ,null,null); 
     if(readFstSms.moveToFirst()) 
     { 
      String msg_body = c.getString(c.getColumnIndexOrThrow("body")).toString(); 
      //String sender_number = c.getString(c.getColumnIndexOrThrow("address")).toString(); 
      readtxt.setText(msg_body); 
     } 
     readFstSms.close(); 
    } 
    }); 
0
listitem=(ListView)findViewById(R.id.list_view); 

      Uri mSmsQueryUri = Uri.parse("content://sms/inbox"); 
      List<String> messages = new ArrayList<String>(); 

      Cursor cursor = null; 
      try { 
       cursor = getContentResolver().query(mSmsQueryUri, null, null, null, null); 
       if (cursor == null) { 
        // Log.i(TAG, "cursor is null. uri: " + mSmsQueryUri); 

       } 
       for (boolean hasData = cursor.moveToFirst(); hasData; hasData = cursor.moveToNext()) { 
        final String body = cursor.getString(cursor.getColumnIndexOrThrow("body")).toString(); 
        final String sender_no= cursor.getString(cursor.getColumnIndexOrThrow("address")).toString(); 
        final String date= cursor.getString(cursor.getColumnIndexOrThrow("date")); 
        final String type =cursor.getString(cursor.getColumnIndexOrThrow("type")); 


        messages.add(body); 
        messages.add(sender_no); 
        messages.add(date); 
        messages.add(type); 
       } 
      } catch (Exception e) { 
       //Log.e(TAG, e.getMessage()); 
      } finally { 
       cursor.close(); 
      } 

      listitem.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1,messages)); 
    } 
} 
1

Aは非常に簡単な解決策は、このSMSパーサライブラリを使用することです:あなたは全体のメッセージを読むことができるのいずれか、それを使用して

https://github.com/adorsys/sms-parser-android

compile 'de.adorsys.android:smsparser:0.0.3' 

を、またはの特定の部分着信メッセージ。また、メッセージの送信元となる電話番号を設定することもできます。

それがどのように機能するか、その使い方についての詳しい情報が必要な場合は、上記のgithubリポジトリを確認してください。