2010-09-25 6 views
0
public class SMSWidget extends AppWidgetProvider { 
private static final String queryString = "@inpion"; 
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 


@Override 
public void onReceive(Context context, Intent intent) { 
    //get SMS Message 
    if(intent.getAction().equals(SMS_RECEIVED)){    
     Bundle bundle = intent.getExtras(); 
     if(bundle != null){ 
      Object[] pdus = (Object[])bundle.get("pdus"); 
      int pduslen = pdus.length; 
      SmsMessage[] messages = new SmsMessage[pduslen]; 

      String str= ""; 
      for(int i=0; i<pduslen; i++){ 
       messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 

       try { 
        str += new String(messages[i].getMessageBody().getBytes(),"GB2312"); 
       } catch (UnsupportedEncodingException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 

      for(SmsMessage message : messages){ 
       String msg = message.getMessageBody(); 
       Log.d("======messages=", messages.toString()); 
       if(msg.toLowerCase().startsWith(queryString)){ 
        Log.d("======SMS RECIVED======", "OK"); 
        //View new message 
        RemoteViews rv ; 
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
        ComponentName smsWidget = new ComponentName(context, SMSWidget.class);       
        rv = new RemoteViews(context.getPackageName(), R.layout.main); 
        rv.setTextViewText(R.id.catch_sms, "msg:"+msg); 
        appWidgetManager.updateAppWidget(smsWidget, rv);      


        //Delete SMS 
        try{ 
         Uri uriSms = Uri.parse("content://sms/inbox"); 
         Cursor c = context.getContentResolver().query(uriSms, null, null, null, null); 
         if(c != null){ 
          //do{ 
           int threadId = c.getInt(1); 
           Log.d("===threadId: ",threadId+""); 
           int a = context.getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadId), null, null); 
           Log.d("===a: ", a+""); 
          //}while (c.moveToNext()); 
         }else{ 

          Log.d("=no=", c.toString()); 
         } 
        }catch(Exception e){ 
         e.printStackTrace(); 

}}}} 


     android.xml : 
     <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <receiver android:name=".SMSWidget" android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>    
     </intent-filter> 
     <meta-data android:name="android.appwidget.provider" 
      android:resource="@xml/catch_sms_widget_provider" /> 
    </receiver> 

</application> 
<uses-permission android:name="android.permission.RECEIVE_SMS"/> 
<uses-permission android:name="android.permission.WRITE_SMS" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-sdk android:minSdkVersion="5" /> 

в мое приложение, я отправить смс, но в главном экране, AppWidget не может получить его только уведомление может уведомить меня, я хочу к Фрист сообщение было получено в моей AppWidget не появляется в панели уведомлений, Спасибо ?я не могу поймать SMS

+1

Вы не сможете удалить сообщение. Я заметил, что когда вызывается BroadcastReciever, сообщение еще не записано в базу данных. Таким образом, вы пытаетесь удалить что-то, что еще не было создано ... вы можете иногда «спать», прежде чем пытаться удалить его. – st0le

+1

http://stackoverflow.com/questions/1741628/can-we-delete-an-sms-in-android-before-it-reaches-the-inbox/2566199#2566199 –

+0

спасибо, я могу получить сообщение, но как закрыть уведомление системы? – pengwang

ответ

0

в моем коде msg.toLowerCase(). StartWith (queryString) canot run, поэтому я удаляю его, в то же время в xml aim-filter android: priority = "1", который я изменяю android: priority = 20 », а в части« Удалить SMS »i не реализуется временно

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