2013-12-17 47 views
0

收到以下錯誤消息的Android>傳遞活動的參照BroadcastReceiver的子類

The method findViewById is undefined for the type new PhoneStateListener()

所以我的問題是什麼是傳遞一個活動的引用一個BroadcastReceiver子類的正確方法是什麼?

我BroadcastReceiver的子類是低於

package com.example.android; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 
import android.util.Log; 
import android.widget.EditText; 

public class ServiceReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(final Context context, Intent intent) { 
     TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
     telephony.listen(new PhoneStateListener(){ 
      @Override 
      public void onCallStateChanged(int state, String incomingNumber) { 
       super.onCallStateChanged(state, incomingNumber); 
       Log.d("foo","incomingNumber : "+incomingNumber); 

       EditText incomingNum = (EditText) findViewById(R.id.inputText); 

       incomingNum.setText(incomingNumber); 

      } 
     },PhoneStateListener.LISTEN_CALL_STATE); 
    } 
} 

回答

1

而是開創了BroadcastReceiver您可以創建Activity內部的匿名內部Class單獨Class的。那麼你可以參考ActivityfindViewById()通過做MyActivityName.this.findViewById()

+0

謝謝!這會被認爲是「最佳做法」還是一種混合物? BroadcastReceivers不應該正常駐留在它們自己的不同的Class文件中嗎? –

+0

我不認爲這是一個需要在自己的類中定義它。你也可以在你的'BroadcastReceiver'中定義一個接口,並使'Activity'實現它,但我認爲這不是最好的選擇,因爲你將會放棄機制提供的「鬆散」。 – Emmanuel