我有一个怪异的错误,我有一个应用程序,当我拨打电话弹出一个网页时,该应用程序会注册一个Brodcast。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
registerBrodcasts();
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CALL_PHONE, Manifest.permission.READ_CALL_LOG},
MY_PERMISSIONS_REQUEST);
} else {
Toast.makeText(this, "Brodcast registered.", Toast.LENGTH_SHORT).show();
finish();
}
}
private void registerBrodcasts(){
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.NEW_OUTGOING_CALL");
registerReceiver(new CallReceiver(), filter);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == MY_PERMISSIONS_REQUEST) {
if (grantResults.length > 0) {
boolean phoneLogsPermission = grantResults[1] == PackageManager.PERMISSION_GRANTED;
boolean phoneCallPermision = grantResults[0] == PackageManager.PERMISSION_GRANTED;
if (phoneLogsPermission && phoneCallPermision) {
Toast.makeText(this, "Permissions granted, we can call now.", Toast.LENGTH_SHORT).show();
finish();
} else {
Toast.makeText(this, "Please give permissions to the app", Toast.LENGTH_SHORT).show();
}
}
}
}
这就是它的工作方式,当我打开我的应用程序时,它弹出我需要请求的两个权限,即电话和电话日志,授予对此权限的访问权限 registerBrodcasts(); 已启动并注册了我的Brodcast。
但这是错误,如果我在运行时请求权限,并在授予此权限后尝试调用,则我的广播不会启动,但是,如果我转到应用程序设置并手动给它们设置,则广播不会出现问题。
我不知道为什么从我的应用程序中授予此权限的原因不注册我的广播,而手动授予它们的权限。
这是播报
public class CallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Toast.makeText(context, "Intercepted call " + phoneNumber, Toast.LENGTH_LONG).show();
if (phoneNumber.equals("123456789")) {
Intent browserIntent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://myweb.com"));
browserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(browserIntent);
}
}
}
我怀疑当我向该应用程序授予权限时,我的brodcast已在没有此类权限的情况下进行了注册,但是如果我将 registerBrodcasts()方法移至我的 onRequestPermissionResults 它也不起作用
这些都是我的全部权限,我只需要索取 call_phone和read_call_logs
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.NEW_OUTGOING_CALL" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />