0

ここに画像の説明を入力

別のエミュレーターにメッセージを送信すると、SMS を正常に受信できます。しかし、追加の行が表示されています。2 行目を削除するにはどうすればよいですか? 以下のコードを使用してコードを更新すると役立ちます。

受信箱クラス

  public class Inbox extends Activity implements OnClickListener, OnItemClickListener
  {
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.inbox);
    this.findViewById( R.id.btn_updateSMS ).setOnClickListener( this );
}

   ArrayList<String> msgList = new ArrayList<String>();

public void onItemClick( AdapterView<?> parent, View view, int pos, long id ) 
{

}

public void onClick( View v ) 
{

    Cursor cursor = getContentResolver().query( Uri.parse( "content://sms/inbox" ), null, null, null, null);

    int indexBody = cursor.getColumnIndex( SmsReceiver.BODY );
    int indexAddr = cursor.getColumnIndex( SmsReceiver.ADDRESS );

    if ( indexBody < 0 || !cursor.moveToFirst() ) return;

    msgList.clear();

    do
    {
        String str = "Sender: " + cursor.getString( indexAddr ) + "\n" + cursor.getString( indexBody );
        msgList.add( str );
    }
    while( cursor.moveToNext() );

    ListView smsListView = (ListView) findViewById( R.id.msgList );
    smsListView.setAdapter( new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, msgList) );
    smsListView.setOnItemClickListener( this );
}
 }

SMS レシーバー クラス

  public class SmsReceiver extends BroadcastReceiver 
  {

  public static final String ADDRESS = "address";

  public static final String BODY = "body";

  private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
  private static final String TAG = "SMSBroadcastReceiver";

public void onReceive( Context context, Intent intent ) 
{

    if (intent.getAction() == SMS_RECEIVED) {
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            Object[] pdus = (Object[])bundle.get("pdus");
            final SmsMessage[] messages = new SmsMessage[pdus.length];
            for (int i = 0; i < pdus.length; i++) {
                messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
            }
            if (messages.length > -1) {
                Log.i(TAG, "Message recieved: " + messages[0].getMessageBody());
            }
        }
    }
   }
4

3 に答える 3

0

ここでを削除\nします:

 do
    {
        String str = "Sender: " + cursor.getString( indexAddr ) + "\n" + cursor.getString( indexBody );
        msgList.add( str );
    }
    while( cursor.moveToNext() );

<br>代わりに html タグを使用してください。関数を介して文字列を解決してくださいfromHtml()

何かのようなもの :textView.setText(Html.fromHtml(str));

また、アポストロフィ ( ') などの他の特殊文字も避けてください。

于 2012-07-29T12:32:56.563 に答える
0

実際には問題が発生していませんが、自分で削除するだけの明らかなアプローチが問題になるのはなぜですか? (おそらく)改行文字を探して、メッセージの先頭からその位置までの部分を削除します。

于 2012-07-29T11:09:33.803 に答える
0

SMSリストを埋めるときは、カウンターを追加するだけでi=1、リストにSMSを1つ追加するたびに増加します。の場合にのみ、SMS を追加しますi%2!=0

私の例では:

public List<String> getSMS() {      
    List<String> list = new ArrayList<String>();
    Uri uri = Uri.parse("content://sms/inbox");
    Cursor c = null;
    try{
        c = getApplicationContext().getContentResolver().query(uri, null, null ,null,null); 
    }catch(Exception e){
        e.printStackTrace();
    }
    try{
        int i=1;
        for (boolean hasData = c.moveToFirst(); hasData; hasData = c.moveToNext()) {
            final String address = c.getString(c.getColumnIndex("address"));
            final String body = c.getString(c.getColumnIndexOrThrow("body"));
            //Android cripta i messaggi, quindi non devo aggiungerli alla lista:
            if(i%2!=0)
                list.add("Number: " + address + " .Message: " + body);
            i++;
        }
    }catch(Exception e){
        e.printStackTrace();
    }

    // c.close(); 
    return list;
}
于 2012-10-16T14:57:46.510 に答える