简体   繁体   English

如何在Android Oreo和Pie中检测来电

[英]How to detect incoming calls in android Oreo and Pie

I'm working on an application, I'm able to detect incoming calls up-to marshmallow. 我正在开发一个应用程序,能够检测到棉花糖的来电。 But in Oreo and Pie, I'm not able to detect incoming calls because the Broadcast receiver is not triggering. 但是在奥利奥(Oreo)和派(Pie)中,我无法检测到传入呼叫,因为广播接收器未触发。 Please Help me out. 请帮帮我。

After Android 6.0+, even if you have permissions set in the AndroidManifest.xml file, you still have to explicitly ask the user for them if they fall under the category of dangerous permissions. 在Android 6.0及更高版本之后,即使您在AndroidManifest.xml文件中设置了权限,您仍然必须向用户明确要求它们是否属于危险权限类别。 This is the list of such permissions: 这是此类权限的列表:

ACCESS_COARSE_LOCATION ACCESS_COARSE_LOCATION
ACCESS_FINE_LOCATION ACCESS_FINE_LOCATION
ADD_VOICEMAIL ADD_VOICEMAIL
BODY_SENSORS BODY_SENSORS
CALL_PHONE CALL_PHONE
CAMERA 相机
GET_ACCOUNTS GET_ACCOUNTS
PROCESS_OUTGOING_CALLS PROCESS_OUTGOING_CALLS
READ_CALENDAR READ_CALENDAR
READ_CALL_LOG READ_CALL_LOG
READ_CELL_BROADCASTS READ_CELL_BROADCASTS
READ_CONTACTS READ_CONTACTS
READ_EXTERNAL_STORAGE READ_EXTERNAL_STORAGE
READ_PHONE_STATE READ_PHONE_STATE
READ_SMS READ_SMS
RECEIVE_MMS RECEIVE_MMS
RECEIVE_SMS RECEIVE_SMS
RECEIVE_WAP_PUSH RECEIVE_WAP_PUSH
RECORD_AUDIO 录制音频
SEND_SMS 发简讯
USE_SIP USE_SIP
WRITE_CALENDAR WRITE_CALENDAR
WRITE_CALL_LOG WRITE_CALL_LOG
WRITE_CONTACTS WRITE_CONTACTS
WRITE_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE
To ask for such permissions here's the code you can use (I used it in MainActivity.java in the onCreate method): 要请求这样的权限,这里是您可以使用的代码(我在onCreate方法的MainActivity.java中使用了它):

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
    if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_DENIED || checkSelfPermission(Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_DENIED) {
        String[] permissions = {Manifest.permission.READ_PHONE_STATE, Manifest.permission.CALL_PHONE};
        requestPermissions(permissions, PERMISSION_REQUEST_READ_PHONE_STATE);
    }
}

The PERMISSION_REQUEST_READ_PHONE_STATE variable is used to determine which permission was asked for in the onRequestPermissionsResult method. PERMISSION_REQUEST_READ_PHONE_STATE变量用于确定onRequestPermissionsResult方法中要求的权限。 Of course, if you don't need to execute any logic depending on whether or not the user approved the permission, you can leave out this method: 当然,如果不需要根据用户是否批准该权限执行任何逻辑,则可以省略此方法:

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case PERMISSION_REQUEST_READ_PHONE_STATE: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "Permission granted: " + PERMISSION_REQUEST_READ_PHONE_STATE, Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "Permission NOT granted: " + PERMISSION_REQUEST_READ_PHONE_STATE, Toast.LENGTH_SHORT).show();
            }

            return;
        }
    }
}

copy of: https://dev.to/hitman666/how-to-make-a-native-android-app-that-can-block-phone-calls--4e15 副本: https : //dev.to/hitman666/how-to-make-a-native-android-app-that-c​​an-block-phone-calls--4e15

more info https://developer.android.com/training/permissions/requesting?hl=es-419 更多信息https://developer.android.com/training/permissions/requesting?hl=es-419

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM