如何阅读android中即将发布的消息中的消息内容?

我想以编程方式在android中读取新传入SMS的消息正文。

我尝试了一些但不会返回任何内容:

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(); 

我在class级网站上发布了一些关于此的示例程序。 以下是示例阅读短信示例以下是一段代码。 基本上你可以注册一个广播接收器来收听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"); 

下面是读取传入消息并在列表视图中显示的代码段,不要忘记在清单文件中添加权限:

  

这里的代码:

  listitem=(ListView)findViewById(R.id.ListView); Uri mSmsQueryUri = Uri.parse("content://sms/inbox"); List messages = new ArrayList(); 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(ReadMessage.this, android.R.layout.simple_list_item_1,messages)); 

一个非常简单的解决方案是使用此SMS Parser库:

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

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

使用它可以读取整个消息或传入消息的特定部分。 您还可以设置消息来自的电话号码。

如果您需要有关其工作原理或使用方法的更多信息,请检查上面列出的github存储库。

在这个例子中,我将向您展示如何从收件箱中读取最近收到的(传入)短信并在textview中显示它。

  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(); } }); 
 listitem=(ListView)findViewById(R.id.list_view); Uri mSmsQueryUri = Uri.parse("content://sms/inbox"); List messages = new ArrayList(); 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(MainActivity.this, android.R.layout.simple_list_item_1,messages)); } }