2016-11-21 1 views
0

ブロードキャストレシーバーでマルチパートSMSを処理し、それを1つのストリングに保存してから、別の区切り文字で分割し、それからステータスコードを取得します。私は250文字で1つのSMSを持っています。私は以下のコードで試してみましたが、私はエミュレータでそれをテストして親切にも私は受信のためのコードを入れて私を助けることができませんでした。ブロードキャストレシーバーで250文字のように160文字以上のSMSを処理する方法

msgを印刷しようとしましたが、無効な文字も表示されましたが、古いものも上書きします。

私のコードには問題はありません。問題は私がテストされたエミュレータだけです。私は、実際のデバイス上でテストするときにはうまく機能し、私はごめんなさい...

+0

ためMR AxelHありがとうそれを行って、私はあなたの問題が何であるかの確認していません。受信時にmutlipart SMSを再作成するのですか?現在の結果は何ですか?私は自宅でそのコードを持っている、私は数時間でそれをチェックすることを覚えてしようとします。 – AxelH

+0

私は250文字を持っているSMSを受信しようとしましたが、それを受信すると分割され、テキスト表示ではSMSでSMSが表示されます。私はすべてのmsgsに参加し、1文字列だけを表示したい –

+0

長いSMSが1つの意図で受信されました。これはあなたの 'SmsMessage [] messages'の内容です。私はその例で試したエミュレータでそれをテストするので、私は間違っている可能性がありますが、正しい文字列を取得していないものを試してみました[これ(http://stackoverflow.com/questions/7469881/broadcastreceiver-for-multipart-sms) – AxelH

答えて

0

は、最後に私はあなたの答え

DataBaseHandler db; 
     String mySmsText; 
     public void onReceive(Context context, Intent intent) { 
      db = new DataBaseHandler(context); 
      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 > 0) { 
        StringBuffer content = new StringBuffer(); 
        for (SmsMessage sms : messages) 
         content.append(sms.getDisplayMessageBody()); 
        mySmsText = content.toString(); 
       } 
       db.update_sys_pwd(mySmsText); 
       instance.t1.setText(mySmsText); 
      } 
     } 
+0

少なくとも、「あなたはgetDisplayMessageBody()を使うことがわかります」ということを説明し、その理由に関する情報を追加します。誰かが同じ問題でここで終わるなら、これは役に立つかもしれません。 – AxelH

+0

問題はエミュレータにあり、私は全体のSMSを保存しません。 sms.getDisplayMessageBody()メソッドは、sms bodyを返します。その後StringBufferオブジェクトに格納されます。それはテキストを表示し、実際のデバイスでテストします。 –

+0

詳しい情報であなたの答えを編集する、教えてください;) – AxelH

関連する問題