Как получить вызовы с помощью службы в Android с помощью курсора?

Я получил вызовы с помощью Activity, но тот же код, похоже, не работает для Service. Курсор не работает. Есть ли альтернатива для курсора в службе или любой другой вариант для получения вызовов в фоновом режиме?

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.selection_call, container, false);

    ContentResolver resolver = getActivity().getContentResolver();
    Context context = getActivity();
    call_logs = (TextView) v.findViewById(R.id.tv_call_logs);
    upload = (FloatingActionButton) v.findViewById(R.id.upload_floatingActionButton);
    StringBuffer sb = new StringBuffer();
    if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_CALL_LOG) !=
            PackageManager.PERMISSION_GRANTED)
    {

        final int REQUEST_CODE_ASK_PERMISSIONS = 123;
        ActivityCompat.requestPermissions(getActivity(), new String[]{"android.permission.READ_CALL_LOG"},  REQUEST_CODE_ASK_PERMISSIONS);
        ActivityCompat.requestPermissions(getActivity(), new String[]{"android.permission.WRITE_CALL_LOG"}, REQUEST_CODE_ASK_PERMISSIONS);
    }

    Cursor cur = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, android.provider.CallLog.Calls.DATE + " DESC");

    int number = cur.getColumnIndex( CallLog.Calls.NUMBER );
    int type = cur.getColumnIndex(CallLog.Calls.TYPE);
    int date = cur.getColumnIndex(CallLog.Calls.DATE);
    int duration = cur.getColumnIndex( CallLog.Calls.DURATION);
    sb.append( "Call Details : \n");
    while ( cur.moveToNext() ) {
        String phNumber = cur.getString( number );
        String callType = cur.getString(type);
        String callDate = cur.getString(date);
        Date callDayTime = new Date(Long.valueOf(callDate));
        String callDuration = cur.getString( duration );
        String dir = null;
        int dircode = Integer.parseInt(callType);
        switch (dircode) {
            case CallLog.Calls.OUTGOING_TYPE:
                dir = "OUTGOING";
                break;

            case CallLog.Calls.INCOMING_TYPE:
                dir = "INCOMING";
                break;

            case CallLog.Calls.MISSED_TYPE:
                dir = "MISSED";
                break;
        }

        sb.append( "\nPhone Number:--- "+phNumber +"\nCall Type:--- " + dir +" \nCall Date:--- " + callDayTime+" \nCall duration in sec :--- "+callDuration );
        sb.append("\n----------------------------------");
    }
    cur.close();
    call_logs.setText(sb);

    return v;
}

Убедитесь, что у вашего приложения есть необходимые разрешения, иначе ваш Service не получит никаких результатов. Service не может запрашивать разрешения, это должно быть сделано через Activity или Fragment.

Larry Schiefer 05.04.2018 17:00

@LarrySchiefer, да, я уже добавил разрешения .. приложение отлично работает для Activity .. но я хочу, чтобы это происходило, когда приложение закрыто

Abhi 05.04.2018 17:04

Если приложению предоставлены разрешения, не имеет значения, выполняется ли вызов с Activity или с Service.

Larry Schiefer 05.04.2018 17:07
0
3
39
0

Другие вопросы по теме