【问题标题】:Android = TelephonyManager (Intent.ACTION_CALL)Android = TelephonyManager (Intent.ACTION_CALL)
【发布时间】:2017-05-13 15:08:22
【问题描述】:

我想在 TelephonyManager 状态 IDLE 检测到 CallEnded 变量为真值时拨打电话。

第一次通话正常,但当从 OFFHOOK 变为 IDLE 时,我需要执行新的通话意图,但没有显示通话。 p>

我错过了什么?

感谢您的宝贵时间。

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"/>

【问题讨论】:

    标签: android android-intent telephonymanager phone-state-listener


    【解决方案1】:

    第一个问题是您不能使用ACTION_CALL 类似911 的紧急电话号码,因为您不是系统应用程序。 该意图将被转换为ACTION_DIAL 意图,从而导致系统电话应用出现,并允许用户手动拨打该号码(如果她选择的话)。

    我会先尝试使用标准电话号码,以确保不是问题所在。

    第二个问题与在 Android 上两次调用相同的意图有关。 在某些情况下,Android 可能会检测到完全相同的意图,并且会简单地忽略新的意图。 如果这可能是问题所在,请尝试为您的 url 数据添加一些不断变化的值,例如:

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

    【讨论】:

    • 谢谢,随机值更改代码非常有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多