首页 > 解决方案 > 无法记录呼入和呼出电话语音,并且应用程序关闭时在后台被杀死

问题描述

下面是我正在尝试的代码

MainActivity.java

包 com.aravindchowdary.callrecorder.CallRecording;

导入android.Manifest;导入 android.app.admin.DevicePolicyManager;导入 android.content.ComponentName; 导入android.content.Context;导入android.content.Intent;导入 android.content.SharedPreferences;导入 android.content.pm.PackageManager;导入android.net.Uri;导入 android.preference.PreferenceManager;

导入androidx.core.app.ActivityCompat;导入androidx.core.content.ContextCompat;导入androidx.appcompat.app.AppCompatActivity;

导入android.os.Bundle;导入android.util.Log;导入android.view.View;导入android.widget.Button;导入 android.widget.EditText;导入 android.widget.Toast;

导入 com.aravindchowdary.callrecorder.Preferences;导入 com.aravindchowdary.callrecorder.R;

导入 java.util.ArrayList;导入 java.util.List;

公共类 RecordActivity 扩展 AppCompatActivity { private boolean checkResume = false; 私人字符串电话;私人EditText etCall;私人偏好偏好;public static final String TAG = "PhoneStateReceiver"; 私有静态最终 int REQUEST_CODE = 0; 私有 DevicePolicyManager mDPM;私有组件名 mAdminName;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_record);
    preferences = Preferences.getSharedPrefInstance(this);

    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
    pref.edit().putInt("numOfCalls", 0).apply();

    Button btnCall = findViewById(R.id.btnCall);
    etCall = findViewById(R.id.etCall);


    btnCall.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (validateCall()) {
                preferences.saveCall(true);
                Log.d(TAG, "PrefcallSave: " + preferences.getcall());
                Intent intent = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phone, null));
                startActivity(intent);
            }
        }
    });

}

private boolean validateCall() {
    phone = etCall.getText().toString().trim();
    if (phone.isEmpty()) {
        etCall.setError("Phone number can't be empty");
    } else {
        return true;
    }
    return false;
}

@Override
protected void onResume() {
    super.onResume();
    Log.e("Check", "onResume: ");
    if (checkPermission()) {
        if (checkResume == false) {
        }
    }
}

protected void onPause() {
    super.onPause();
    SharedPreferences pref3 = PreferenceManager.getDefaultSharedPreferences(this);
    if (pref3.getBoolean("pauseStateVLC", false)) {
        checkResume = true;
        pref3.edit().putBoolean("pauseStateVLC", false).apply();
    } else
        checkResume = false;
}

private boolean checkPermission() {
    int i = 0;
    String[] perm = {Manifest.permission.READ_PHONE_STATE, Manifest.permission.RECORD_AUDIO,

Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_CONTACTS};列表 reqPerm = new ArrayList<>();

    for (String permis : perm) {
        int resultPhone = ContextCompat.checkSelfPermission(RecordActivity.this, permis);
        if (resultPhone == PackageManager.PERMISSION_GRANTED)
            i++;
        else {
            reqPerm.add(permis);
        }
    }

    if (i == 5)
        return true;
    else
        return requestPermission(reqPerm);
}


private boolean requestPermission(List<String> perm) {

    String[] listReq = new String[perm.size()];
    listReq = perm.toArray(listReq);
    for (String permissions : listReq) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(RecordActivity.this,

权限)) { Toast.makeText(getApplicationContext(), "需要的电话权限" + 权限, Toast.LENGTH_LONG); } }

    ActivityCompat.requestPermissions(RecordActivity.this, listReq, 1);


    return false;
}


public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 1:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
                Toast.makeText(getApplicationContext(), "Permission Granted to access Phone calls", Toast.LENGTH_LONG);
            else
                Toast.makeText(getApplicationContext(), "You can't access Phone calls", Toast.LENGTH_LONG);
            break;
    }

} }

请帮我解决这个问题提前谢谢

标签: androidserviceandroid-10.0

解决方案


推荐阅读