2012-02-23 4 views
0

電話機のサービス状態がいつ変化するかを判断するには、アプリケーション全体のリスナーが必要です。私はオンラインですべての例を見てきましたが、行をコピーし、マニフェストを修正しました。何もできません。PhoneStateListenerを動作させることはできません。私は例を見てきました

電話状態のリスナーはアクティビティにいなければなりませんか?私は電話状態の変化を聞くためにいくつかの普通の古いクラスを持つことができますか?

これは非常にイライラです。私は私のクラスで

...

 private class ServiceReceiver extends BroadcastReceiver{ 

     @Override 
     public void onReceive(android.content.Context context, Intent intent) { 

      Log.i(TAG, "onReceive"); 

      MyPhoneStateListener qpsl = new myPhoneStateListener(); 
      TelephonyManager tm = (TelephonyManager)context.getSystemService(android.content.Context.TELEPHONY_SERVICE); 
      tm.listen(qpsl, PhoneStateListener.LISTEN_SERVICE_STATE); 
     } 
    } 

    private class MyPhoneStateListener extends PhoneStateListener{ 

public void onServiceStateStateChanged(ServiceState serviceState){ 
    Log.i(TAG, "ServiceState = " + serviceState.getState(); 
} 

私は放送受信機とphonestateのマニフェストを変更する必要があります知っています。どこ?私はこのアプリケーションを幅広くしたい。

これは私がサービス状態の変更をリッスンできるように、私が欠けているものを私が持っているすべてのコードは、誰かが私を見ることができますか?

答えて

0

私は放送が決して受信されない理由は何もあなたのために働く理由を疑う。マニフェストにどのような放送を登録しましたか?覚えておきますが、電話の状態の変化は「従来の」ブロードキャストではありません。代わりにこのPhoneStateListenerオブジェクトを登録する必要があります。いずれの場合においても

、あなたは、このためにBroadcastReceiverは必要ありません。代わりにServiceを使用してください。上記のonReceive()のコードをonStartCommand()Serviceに移動するだけでよいです。

私は、単純な「劣悪な信号歴史」アプリで同様の線に沿って何かを実装している、それが正常に動作します。プロジェクトはhereにアップロードされます。

+0

この作業を行うためにマニフェストには何を入力する必要がありますか?受信機を登録するにはどうすればいいですか? –

+0

私が言ったように、電話状態は伝統的な「放送」ではないので。それが1つであれば、あなたはそれをマニフェストに登録し、あなたの 'BroadcastReceiver'が興味を持っている放送の意図について言及しなければならないでしょう。電話状態リスナーを"登録 "する正しい方法は' TelephonyManager'の 'listen () 'メソッドを呼び出します。これでコードが呼び出されないので、このコードを 'onReceive()'から移動するだけです。 SOにこの答えをチェック - http://stackoverflow.com/a/8657099/570930 – curioustechizen

関連する問題