0

私はTelephonyManager状態IDLECallEnded変数に真の値を検出したときにコールを作りたいです。アンドロイド= 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インテントに変換され、システムフォンアプリが表示され、ユーザが手動で番号に電話をかけることができます。

これは問題ではないことを確認するために、まず標準の電話番号を試してみます。

2番目の問題は、Androidで同じインテントを2回呼び出すことに関連しています。 場合によっては、Androidがまったく同じ意図を検出し、新しいものを無視するだけの場合があります。

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

おかげで、非常に参考にランダムな値チェンジャーコード:それは問題になる可能性があります 場合は、同様に、あなたのURLのデータにいくつかの絶えず変化する値を追加してみてください。 – anubits

関連する問題