2015-09-04 17 views
1

我有應用程序,它可以通過點擊通話按鈕撥號。這裏的代碼是按鈕onClickListener設置按鈕在通話時間禁用

Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + obj.getPhoneNumber())); 
        callIntent.setData(Uri.parse("tel:" + obj.getPhoneNumber())); 
        callIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
        startActivity(callIntent); 

如何在打電話時禁用此按鈕,並在通話結束時啓用?我的問題是,用戶可以單擊背景按鈕,同時兩次撥號程序啓動和撥號器運行(而不是在任務的頂部)

回答

1

這可以通過使用來實現後並在Activity課程中註冊PhoneStateListener(請參閱docs)。

該文檔說明這類如下:

用於在設備上在特定電話狀態的變化進行監測,包括服務狀態的偵聽器類,信號強度,消息等待指示器(語音郵件),以及其他。

它可以在你的ActivityFragment很容易地註冊使用一個內部類,像這樣:

Button myButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    myButton = findViewById(R.id.mybutton); 
    TelephonyManager TelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
    TelephonyMgr.listen(new MyListener(), 
    PhoneStateListener.LISTEN_CALL_STATE); 
} 

public void enableButton(){ 
    myButton.setEnabled(true); 
} 

public void disableButton(){ 
    myButton.setEnabled(false); 
} 

class MyListener extends PhoneStateListener { 
    public void onCallStateChanged(int state, String incomingNumber) { 
     super.onCallStateChanged(state, incomingNumber); 
     switch (state) { 
      case TelephonyManager.CALL_STATE_IDLE: 
      // CALL_STATE_IDLE 
      enableButton(); 
      break; 
      case TelephonyManager.CALL_STATE_OFFHOOK: 
      //CALL_STATE_OFFHOOK 
      disableButton(); 
      break; 
      case TelephonyManager.CALL_STATE_RINGING: 
      // CALL_STATE_RINGING 
      disableButton(); 
      break; 
      default: 
      break; 
     } 
    } 
} 

在您的清單

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

名單這將需要READ_PHONE_STATE許可呼叫狀態的設備定義在TelephonyManager - see docs

0
yourButton.setEnabled(false); 

加入這一行你

startActivity(callIntent); 
+0

當通話結束時,啓用按鈕怎麼樣? –

+1

添加phoneStateLister,然後在通話完成後重新啓用它。你需要爲此編寫自己的自定義類。 – Android