2011-12-25 10 views
0

私の状況は、BroadcastReceiverクラスを拡張するClassBの内側からClassAから呼び出される特定のメソッドを呼び出すことです。私は別のクラスファイルの中からこれをやる方法と、BroadcastReceiverをセットアップする方法を理解しています。方法を作る方法電話が鳴ったときに別のAndroidクラスファイルから実行する?

以下は、BroadcastReceiverを拡張するクラスファイルです。 パブリッククラスWatchPhoneはBroadcastReceiver {

private ClassA classA; 

@Override 
public void onReceive(Context context, Intent BackToMain) { 
    // TODO Auto-generated method stub 
    TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
    int state = telephony.getCallState(); 
    switch(state) { 
     case TelephonyManager.CALL_STATE_RINGING: 
      Log.d("TestServiceReceiver", "IDLE"); 
      classA.IwantToDoThis(); 
      break; 
    } 
} 

私は手動でそれを要求した場合、アプリケーションで素晴らしい仕事ん呼び出すしようとしている方法を拡張します。私のAndroidManifest.xmlで 私はちょうどクロージングアプリケーションタグの上の下部にあるこの

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

とこれを追加しました。

  <receiver android:name=".WatchPhone"> 
        <intent-filter> 
        <action android:name="android.intent.action.PHONE_STATE" /> 
        </intent-filter> 
      </receiver> 

電話が鳴ると、アプリケーションがクラッシュして閉じます。私が何をすべきかに関するアイデア。

答えて

2

すぐに問題が発生することがあります。クラスAのインスタンスを宣言しましたが、インスタンス化していません。つまり、classA = nullで、使用するとNullPointerExceptionが発生する可能性があります。

代わりにこれを試してみてください:

private ClassA classA = new ClassA(); 

代わりに、あなたはonReceive(の上部付近にそれをインスタンス化することができます):

classA = new ClassA(); 
+0

あなたが正しいです私はこれを行うには新しいんが、私はまだ取得していますNullPointerException私が電話を受けるたびにアプリケーションがクラッシュする – itgeek25

+0

私はこれを修正するために、新しいBroadcastReceiver()を使って同じJavaクラス内にbroadcastreceiverを追加しました。それから私はそのクラスのメソッドを呼び出し、うまく動作します。 – itgeek25

関連する問題