2012-01-12 96 views
0

我是android.I的新手,我嘗試在主類中註冊Broadcastreceiver來接收sms.But當我運行logcat時顯示「接收廣播意圖時出錯」,並且應用程序變得強制關閉。對此的解決方案? 這裏是我的代碼:如何註冊BroadcastReceiver

public class Yes extends Activity { 
/** Called when the activity is first created. */ 
private Retrieve receiver = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button start=(Button)findViewById(R.id.bt1); 
start.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      receiver = new Retrieve(); 
       registerReceiver(receiver,new 
          IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 

      } 
      }); 
       } 
      private class Retrieve extends BroadcastReceiver 
       { 

public void onReceive(Context context, Intent intent) { 

    Bundle bundle = intent.getExtras(); 

    Object messages[] = (Object[]) bundle.get("pdus"); 
    SmsMessage smsMessage[] = new SmsMessage[messages.length]; 
    for (int n = 0; n<messages.length; n++) { 
    smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
    smsMessage[0].getMessageBody(); 

    } 

    // show first message 
    Toast toast = Toast.makeText(context, 
    "Received SMS: " + smsMessage[0].getMessageBody(), Toast.LENGTH_LONG); 
    toast.show(); 
      }} 

我把一個啓動按鈕,我試圖內rgister接收器button.I清單文件接收sms.i提供許可,不得以manifest.I覺得沒寫意圖過濾器我註冊接收器的方式是什麼,我想我do.help完全錯誤的......

回答

0

在您的活動之外,建立一個廣播(或寫作爲一個單獨的類):

private BroadcastReceiver smsReceiver = new BroadcastReceiver(){ 
public void onReceive(Context context, Intent intent) { 
    //do your task 
    } 
} 

在onClick只需註冊Receiver:

registerReceiver(smsReceiver, filter); 
+0

感謝約翰,是semicollan是你的代碼後,需要?現在我的錯誤說你是否錯過了一個調用來取消註冊接收器?我如何取消註冊,如果我註冊按鈕內。吐司消息也不會出現。只有通知欄被看到,該怎麼辦?之後我登記清單文件接收 – divya 2012-01-12 10:09:18

+0

問題解決,在一個單獨的類編寫代碼的廣播接收器。 – divya 2012-01-12 12:30:15

+0

調用unRegisterReceiver(smsReceiver);當你不再需要它時...例如,在Activity的onStop()方法中。如果在清單中註冊,我認爲Android會自動管理它 – JohnCookie 2012-01-13 01:12:55