android - 无法记录呼入和呼出电话语音,并且应用程序关闭时在后台被杀死
问题描述
下面是我正在尝试的代码
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; } } }
请帮我解决这个问题提前谢谢
解决方案
推荐阅读
- unit-testing - 在 @AfterMethod 中撤消 Whitebox.setInternalState 而不设置原始状态
- powershell - 计算 csv 列中包含“男性”的行数
- sql-server - 如何从 EMI 金额和分期付款中找到支付的利息和本金金额
- android - 如何解决这个二进制 XML 文件第 8 行:Error inflating class android.support.v7.widget.CardView
- javascript - 如何使用 cookie 进行标准登录以保持用户登录?
- java - 如何使用 java 客户端驱动程序在 Arangodb 中使用 pregel 模块
- aws-fargate - aws ECS- Farget 任务提交等待时间
- ios - 如何使用 UIImageView resizableImage 添加阴影
- orientdb - Gephi中的无向图
- amazon-web-services - 如何在我的 Elastic Beanstalk CloudFormation 模板中添加监控