Проблема: выяснить причину отключенного звонка - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь создать приложение, которое может делать телефонные звонки. Если телефонный звонок заканчивается, приложение должно проверить, почему звонок был завершен. Если пользователь повесил трубку, он ничего не должен делать. В любых других случаях отключения приложение должно набрать последний номер. Я попытался использовать класс DisconnectCause, чтобы получить причину отключения. Однако я пытался сделать это, но он всегда терпел неудачу, и я понятия не имею, почему.

Вот мой MainActivity. Все мои попытки DisconnectCause потерпели неудачу, поэтому вот только рабочий код для PhoneCall ...

package com.example.anrufapp;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;



import android.os.Build;
import android.os.Bundle;



import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;




import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import com.example.myapplication.R;


public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CALL = 1;
    private EditText mEditTextNumber;

    public static final String TAG = MainActivity.class.getSimpleName();



    @Override
    public void onCreate(Bundle savedInstanceState) {



        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mEditTextNumber = findViewById(R.id.edit_text_number);





    }


    public void makePhoneCall() {

        String telefonnummer = mEditTextNumber.getText().toString();

        if (telefonnummer.trim().length() > 0) {   //ZAHLEN EINGEBEN? LEERZEICHEN WERDEN DURCH TRIM WEGGEMACHT

            if (ContextCompat.checkSelfPermission(MainActivity.this, //WENN NUMMER EINGEGEBEN, PERMISSION CHECKEN!
                    Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(MainActivity.this,
                        new String[] {Manifest.permission.CALL_PHONE}, REQUEST_CALL);

            } else {

                String dial = "tel:" + telefonnummer;

                startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(dial)));



                }

        } else {
            Toast.makeText(MainActivity.this, " Nummer eingeben", Toast.LENGTH_LONG).show();
        }

    }
    private class MyPhoneCallListener extends PhoneStateListener {

        private boolean returningFromOffHook = false;


        @Override
        public void onCallStateChanged(int state, String incomingNumber) {

            // Define a string for the message to use in a toast.
            String message = "Phone Status: ";

            switch (state) {
                case TelephonyManager.CALL_STATE_RINGING:
                    // Incoming call is ringing (not used for outgoing call).
                    // Incoming call is ringing (not used for outgoing call).
                    message = message + "RINGING, number: " + incomingNumber;
                    Toast.makeText(MainActivity.this, message,
                            Toast.LENGTH_SHORT).show();
                    Log.i(TAG, message);
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    // Phone call is active -- off the hook.
                    message = message + "OFFHOOK";
                    Toast.makeText(MainActivity.this, message,
                            Toast.LENGTH_SHORT).show();
                    Log.i(TAG, message);
                    returningFromOffHook = true;
                    break;
                case TelephonyManager.CALL_STATE_IDLE:
                    // Phone is idle before and after phone call.
                    message = message + "IDLE";
                    Toast.makeText(MainActivity.this, message,
                            Toast.LENGTH_SHORT).show();
                    Log.i(TAG, message);
                    if (returningFromOffHook) {

                                               // No need to do anything if >= version KitKat.
                        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
                            Log.i(TAG, "Restarting app");
                           //  Restart the app.
                         //   Intent intent = getPackageManager()
                           //         .getLaunchIntentForPackage(
                             //               .getPackageName());
                           // intent.addFlags
                             //       (Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            //startActivity(intent);
                        }
                    }
                    break;
                default:
                    // Must be an error. Raise an exception or just log it.
                    break;
            }
        }
    }



    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == REQUEST_CALL) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                makePhoneCall();
            } else {
                Toast.makeText(this, "keine Permission", Toast.LENGTH_SHORT).show();
            }
        }


    }


}
...