Я пытаюсь создать приложение, которое может делать телефонные звонки. Если телефонный звонок заканчивается, приложение должно проверить, почему звонок был завершен. Если пользователь повесил трубку, он ничего не должен делать. В любых других случаях отключения приложение должно набрать последний номер. Я попытался использовать класс 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();
}
}
}
}