0

내가 변수를 CallEnded에 TelephonyManager 상태 IDLE가 true 값을 감지하면 전화를 만들고 싶어.안드로이드 = TelephonyManager (Intent.ACTION_CALL)

첫 번째 호출은 일반적으로 간다, 그러나 IDLEOFFHOOK의 변경이 나는 새 통화 의도를 필요로 할 때 수행 할 수 있지만, 게재 아무 전화도 없다.

내가 무엇이 누락 되었습니까?

감사합니다.

import android.Manifest; 
import android.content.Context; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.net.Uri; 
import android.support.v4.app.ActivityCompat; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

private Boolean CallEnded = false; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

final TelephonyManager telephoneM = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 

PhoneStateListener listener = new PhoneStateListener() { 

     public void onCallStateChanged(int state, String incomingNumber) { 


      switch (state) { 

       case TelephonyManager.CALL_STATE_IDLE: 

        if(CallEnded){ 

        performDial(); 

        } 


        break; 


       case TelephonyManager.CALL_STATE_RINGING: 

        break; 


       case TelephonyManager.CALL_STATE_OFFHOOK: 

        CallEnded=true;      

      } 
     } 
    }; 


    telephoneM.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); 


Button button = (Button) findViewById(R.id.button); 


button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      performDial(); 

     } 
    }); 

    } 

    private void performDial() { 

    Intent dial = new Intent(Intent.ACTION_CALL); 
    dial.setData(Uri.parse("tel:911")); 

    if (ActivityCompat.checkSelfPermission(MainActivity.this,  Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){ 

     return; 
    } 

} 

매니페스트

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

답변

0

첫 번째 문제는 당신이 당신의 911 같은 비상 번호는 시스템 응용 프로그램 아니에요 ACTION_CALL 허용하지 않을 것입니다. 의도가 ACTION_DIAL 인 텐트로 변환되어 시스템 전화 앱이 나타나고 사용자가 수동으로 전화를 걸도록 허용합니다.

나는 이것이 문제가 아닌지 확인하기 위해 표준 전화 번호로 먼저 시도 할 것입니다.

두 번째 문제는 Android에서 동일한 의도를 두 번 호출하는 것과 관련이 있습니다. 경우에 따라 Android가 정확한 의도를 감지하여 새로운 것을 무시할 수 있습니다.

Intent dial = new Intent(Intent.ACTION_CALL); 
dial.setData(Uri.parse("tel:212-555-1234" + "?time=" + System.currentTimeMillis())); 
+0

감사합니다, 매우 도움이 임의의 값 체인저 코드 : 그게 문제가 될 수 경우처럼, 당신의 URL의 데이터 일부 끊임없이 변화하는 값을 추가하려고합니다. – anubits