Обнаружение входящих и исходящих звонков, когда приложение закрыто - PullRequest
0 голосов
/ 06 июля 2018

Я работаю над приложением, которое может обнаруживать входящие и исходящие звонки в Android и записывать их. Мне нужно знать, кто из моих симов получает вызов или совершает вызов.

Я могу обнаружить звонки, но не могу определить свой номер в случае двойной симки. Я попытался проверить это из моих журналов вызовов.

Вот мой код:

private void fetchCallLogs(final Context context) {
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {

        @Override
        public void run() {
            // get start of cursor
            Log.i("CallLogDetailsActivity", "Getting Log activity...");

            if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }
            Cursor cur = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DATE + " desc");

            int accountId = cur.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID);
            //Check if call was made from sim 1 or sim 2 , if it returns 0 its from sim 1 else if 1 its from sim 2.

            String callid = "0";
            if (cur.moveToFirst() == true) {
                String phNumber = cur.getString(accountId);
                int idSimId = getSimIdColumn(cur);

                if(idSimId >= 0){
                    callid = cur.getString(idSimId);
                }

                cur.close();


            }
        }
    }, 1500);
}

public static int getSimIdColumn(final Cursor c) {

    for (String s : new String[] { "sim_id", "simid","simId","simSlot", "sub_id","slot","simnum","slotId","slot_id","slotIdx" }) {
        int id = c.getColumnIndex(s);
        if (id >= 0) {
            Log.d("TAG", "sim_id column found: " + s);
            return id;
        }
    }
    Log.d("TAG", "no sim_id column found");
    return -1;
}

также пытался обнаружить, если используется обнаружение слота sim

 String number = intent.getExtra("slot",-1);

но это не работает.

Мне нужен код, который может определить номер сима или слот.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Вы должны неявно зарегистрировать свой получатель в AndroidManifest.xml, например, так:

<receiver
    android:name=".PhonecallReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
    </intent-filter>
</receiver>
0 голосов
/ 06 июля 2018

Есть несколько причин, по которым ваш BroadCastReceiver не работает, когда приложение закрыто ..

  1. Некоторые мобильные телефоны не позволяют запускать приложения в фоновом режиме, такие как oppo, xiaomi, huawei и т.д .., чтобы решить эту проблему, попробуйте это Ссылка
  2. Последняя версия Android Oreo Ограничения на вещание

если эти причины не являются частью вашей проблемы, воспользуйтесь услугой. Как это сделать? нажмите

...