2013-07-05 130 views
0

我有一個Java類與佈局。我想讓BroadcastReceiver獲得來電號碼。我怎麼能在我的活動來實現這個目的:接收和註冊BroadcastReceiver

此,我想這一點:

package com.example.callchecker; 

    import android.app.Activity; 
    import android.app.Dialog; 
    import android.content.Context; 
    import android.os.Bundle; 
    import android.util.Log; 
    import android.view.View; 
    import android.widget.Button; 
    import android.content.BroadcastReceiver; 
    import android.content.Intent;; 

    public class Mark_number extends Activity { 
     Context context = this ; 
     Dialog D =new Dialog(context); 
Button btn_dialog = (Button) findViewById(R.id.btn_dialog); 
Button btn_dismiss = (Button) D.findViewById(R.id.btn_dismiss); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mark_number); 

    private BroadcastReceiver myR = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      // TODO Auto-generated method stub 

     } 
    }; 

} 
    } 

這是正確的做法還是我不得不做出這樣的擴展BraodcastRceiver另一個類?

public class My_Receiver extends BroadcastRceiver { 

如果要創建另一個類,那麼如何從我的主要活動調用它?

+0

hi natiq:如果您沒有要求動態刪除收聽,您可以在清單中註冊接收器。 –

回答

1

如果你定義BroadcastReceiver作爲一個匿名對象(第一種選擇),你只能動態註冊它,它會住在你的應用程序執行。當你的應用程序死亡時,它將被自動取消註冊(當然,如果你願意的話,你可以提前取消註冊)。

然而,通過定義一個類在一個單獨的文件擴展BroadcastReceiver第二個選項),你可以在AndroidManifest.xml文件中聲明它,這將讓你接收廣播,即使您的應用程序已經死了。

哪個更好?取決於你的要求。如果在應用程序關閉時不需要接收廣播,則可以聲明匿名對象並動態註冊/取消註冊(較短的選項)。但是,如果您確實需要始終接收廣播,則必須在另一個類中定義它並在清單中聲明它。

+0

即使當我的應用程序沒有運行時,我也想獲得來電的電話號碼。 所以你說第二個選項對我有好處? 如果是的話那麼誰來做我在AndroidManifist註冊Broadcastreceiver? – natiq

+0

如果您想要在應用程序未運行時接收廣播,則第二個選項是**必須**。在這裏閱讀有關接收器:http://developer.android.com/reference/android/content/BroadcastReceiver.html – Jong

0

第二個是要走的路!

向您的主要活動擴展廣播接收器的類發送意圖,以便將期望的事件發送到該類。

+0

你能解釋一下如何做到這一點? 如何從主要活動調用擴展BroadcastReceiver類? – natiq

+0

你可以通過發送一個intent>聲明一個指向廣播接收器的意圖並通過startService(intent)啓動它。 –

相關問題