2016-08-14 6 views
2

私は自分のアプリケーション内で携帯電話の状態を受信するために、次のコードを持っている:アンドロイドPhoneStateListener間違った状態

private PhoneStateListener phoneListener = new PhoneStateListener(){ 
    public void onCallStateChanged(int state,String incomingNumber){ 
     switch(state){ 
      case TelephonyManager.CALL_STATE_IDLE: 
       Log.i(TAG, "IDLE"); 
       break; 
      case TelephonyManager.CALL_STATE_OFFHOOK: 
       Log.i(TAG, "OFFHOOK"); 
       break; 
      case TelephonyManager.CALL_STATE_RINGING: 
       Log.i(TAG, "RINGING"); 
       break; 
     } 
    } 
}; 

すべてが2つのエミュレータ(Androidの6.0とAndroid 4.4)で正常に動作します。リンギングしながら、しかし、私の本当のデバイス(アンドロイド4.4、Oukitelオリジナルワン)の上に、私は次の出力を持っている:

RINGING 
IDLE //in real I'm still ringing here. 
IDLE //real stop ringing 

は、任意の狡猾な機能はありますかそれはファームウェアでただのバグですか?残念ながら、私の検索は何にもつながりませんでした。

UPD 一部のデバイスでは正常に動作し、他のデバイスでは上記のように動作します。

さらに詳しい情報。私はこのリスナーを私のサービスのonStartCommandに設定しました。 TelephonyManager.EXTRA_STATE_RINGINGが見つかった場合、サービスはブロードキャスト受信者から開始されました。

UPD2 まあ、私は解決策を見つけました。放送受信機が正常に動作しているので、私はReceiver通知に切り替えました。しかし、PhoneStateListenerの問題は本当に面白いです。誰かがアイデアを持っているなら、私に知らせてください。

答えて

0

あなた を助けるために必ずこのコードを使用してくださいしていないemmulatorに実際のデバイス上でご確認ください

http://www.compiletimeerror.com/2013/08/android-call-state-listener-example.html#.V7CLBvl97IU

+0

はリンク彼らとしてだけで答えを投稿しないでください。代わりに、OPが間違っているかもしれないことについて話し合う。 – Shaishav

+0

いいえ、記事のコードは正常に動作しますが...私のコードとの違いはありません。 – Tamplier

0

私は、サービスを持っていることによって4.4にこの問題を解決することができたに呼び出し中startForeground通知を行いますサービスを生かしてください。あなたの問題は別の場所にあるかもしれませんが、これを試してみる価値があります。私のサービスで

のonCreate:彼らは時間とともに死ぬこととして

Intent notificationIntent = new Intent(this, MainActivity.class); 

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, 
      notificationIntent, 0); 

    Notification notification = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.ic_icon1) 
      .setContentTitle("title") 
      .setContentText("description") 
      .setContentIntent(pendingIntent).build(); 

    startForeground(1337, notification); 
関連する問題