2011-05-17 19 views
10

tôi thêm đây là file manifest của tôi -Không thể nhận được TelephonyManager.CALL_STATE_RINGING

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

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

Sau đó, lớp dịch vụ của tôi là như thế này -

public class ServiceReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    MyPhoneStateListener phoneListener = new MyPhoneStateListener(); 
    TelephonyManager telephony = (TelephonyManager) context 
      .getSystemService(Context.TELEPHONY_SERVICE); 
    telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 
} 

}

và PhoneStateListener của tôi là -

public class MyPhoneStateListener extends PhoneStateListener { 

public void onCallStateChanged(int state, String incomingNumber) { 
    Log.i("telephony-example", "State changed: " + stateName(state)); 
} 

String stateName(int state) { 
    switch (state) { 
    case TelephonyManager.CALL_STATE_IDLE: 
     Log.d("DEBUG", "***********IDLE********"); 
     return "Idle"; 
    case TelephonyManager.CALL_STATE_OFFHOOK: 
     Log.d("DEBUG", "***********OFFHOOK********"); 
     return "Off hook"; 
    case TelephonyManager.CALL_STATE_RINGING: 
     Log.d("DEBUG", "***********RINGING********"); 
     return "Ringing"; 
    } 
    return Integer.toString(state); 
} 

}

Tôi có thể xem trạng thái IDLE.

Nhưng khi tôi gọi tôi không nhận trạng thái chuông. Tại sao?

Trả lời

14

Tôi nghĩ bạn đang trộn hai phương pháp để nhận trạng thái điện thoại. Nếu bạn sử dụng bộ lọc có ý định và bộ thu phát sóng, thì trong bộ thu không cần gọi điện thoại của bộ nghe TelephonyManager(). Chỉ cần kiểm tra mục đích nhận được như thế này:

public void onReceive(Context context, Intent intent) { 
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
    String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
    if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) 
    { 
     Log.d("MPR", "Its Ringing [" + number + "]"); 
    } 
    if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)) 
    { 
     Log.d("MPR", "Its Idle"); 
    } 
    if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state)) 
    { 
     Log.d("MPR", "Its OffHook"); 
    } 
} 
+0

Cảm ơn ... có chuông :) BTW bạn có biết làm thế nào để làm cho nó tạm dừng ứng dụng của tôi khi điện thoại đổ chuông và sau đó quay trở lại ứng dụng khi gọi điện thoại kết thúc? – nasaa

+1

AFAIK, nếu ứng dụng của bạn đang chạy một hoạt động, onPause và onStop sẽ được gọi để nhận hoạt động của điện thoại ở phía trước. Nếu bạn đang chạy một dịch vụ tôi không 'thấy một lý do tại sao bạn muốn tạm dừng công việc bạn đang làm. Tuy nhiên nếu bạn muốn sử dụng phương pháp trên để biết khi nào điện thoại đang đổ chuông và sau đó tùy thuộc vào logic ứng dụng của bạn ngừng làm việc và tiếp tục sau nhưng tôi không thấy lý do tại sao bạn làm điều đó từ một dịch vụ! – advantej

+0

cũng vấn đề là tôi có một bài hát chơi nhưng nó không dừng lại khi điện thoại đổ chuông vì vậy tôi hỏi. – nasaa

Các vấn đề liên quan