2014-01-21 2 views
2

Я разрабатываю одно приложение, которое принимает sms из Inbox, я получаю sms успешно, но мое требование получает только новое (последнее) сообщение, я не хочу читать все сообщения из папки «Входящие», пожалуйста помочь мнеТолько последние смс в android

мой код

public class MainActivity extends Activity { 


    TextView showText; 
StringBuilder sb = new StringBuilder(); 
ArrayAdapter<String> adapter; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    showText = (TextView)findViewById(R.id.text); 
    String message = getMessagess(); 

    showText.setText(message); 
} 

public String getMessagess(){ 
    Cursor cursor=null; 
    Uri smsuri = Uri.parse("content://sms/inbox"); 
    try{ 
    cursor =getContentResolver().query(smsuri, null, null, null, null); 
    if (cursor == null) { 
     // Log.i(TAG, "cursor is null. uri: " + mSmsQueryUri); 

     } 

    for(boolean 
     hashdata=cursor.moveToFirst();hashdata;hashdata=cursor.moveToNext()){ 

     final String body = 
     cursor.getString(cursor.getColumnIndexOrThrow("body")).toString(); 
     final String senderNo= 
     cursor.getString(cursor.getColumnIndexOrThrow("address")).toString(); 
     final String date = 
     cursor.getString(cursor.getColumnIndexOrThrow("date")); 
     final String type = 
     cursor.getString(cursor.getColumnIndexOrThrow("type")); 

    if(senderNo.equals("+XXXXXXXXXX")){ 

     for(String bd:body.split(";")) 
     sb.append(bd); 

     sb.append("\n"); 

     } 
    } 
    if(sb==null){ 

     sb.append("no message found"); 
    } 

    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
    finally{ 
    cursor.close(); 
    } 
    return sb.toString();  
} 

}

+0

вы хотите недавний SMS с почтового ящика или новое SMS прибыл в почтовый ящик.? – SilentKiller

+0

Я хочу, чтобы новое сообщение прибыло во входящие, – Durga

+0

Для этого вам нужно создать BroadCastReceiver. – SilentKiller

ответ

3

для этого вам нужно создать BroadcastReceiver, которые получают SMS_RECEIVED радиопередачу и отправить уведомление в приложение, что новые SMS было arrieved.

Попробуйте следующий код.

ReceiveSMSActivity:

public class ReceiveSMSActivity extends Activity { 

public static TextView messageBox; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    messageBox=(TextView)findViewById(R.id.messageBox); 
} 

public static void updateMessageBox(String msg) { 
    messageBox.append(msg); 
} 

} 

TextMessageReceiver:

public class TextMessageReceiver extends BroadcastReceiver { 

public void onReceive(Context context, Intent intent) { 
    Bundle bundle=intent.getExtras(); 

    Object[] messages=(Object[])bundle.get("pdus"); 
    SmsMessage[] sms=new SmsMessage[messages.length]; 

    for(int n=0;n<messages.length;n++){ 
     sms[n]=SmsMessage.createFromPdu((byte[]) messages[n]); 
    } 

    for(SmsMessage msg:sms) { 
     ReceiveSMSActivity.updateMessageBox("\nFrom: "+msg.getOriginatingAddress()+"\n"+ 
       "Message: "+msg.getMessageBody()+"\n"); 
    } 
} 
} 

добавить это в AndroidManifest.xml

<receiver android:name=".TextMessageReceiver"> 
    <intent-filter> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 

и это разрешение слишком

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

Другой SampleCode: How-to-receive-SMS

+2

спасибо, что ответ он отлично работает – Durga

+0

@ user3081942 :) – SilentKiller

Смежные вопросы