Я знаю, что это было давно, но я надеюсь быть полезным для тех, кто все еще ищет решение!
Недавно мне пришлось работать над аналогичным проектом, где мне нужно было зафиксировать состояние звонка исходящего вызова, и единственный способ, который я смог найти, — это использовать скрытый API родного приложения для набора номера. Это было бы возможно только для Android> 5.0 из-за изменений API. Это было протестировано на Android 5.0.1 и отлично сработало. (p.s. для его работы вам понадобится рутованное устройство, потому что вам нужно установить свое приложение как системное приложение (погуглите как!), Которое затем сможет обнаруживать состояния исходящих вызовов).
Для справки, PhoneStateListener не работает для обнаружения состояний исходящего вызова, как упоминалось во многих сообщениях.
Сначала добавьте это разрешение в файл манифеста,
<uses-permission android:name="android.permission.READ_PRECISE_PHONE_STATE" />
Затем определите свой широковещательный приемник (вот пример кода!)
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
public class MyBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, final Intent intent)
{
switch (intent.getIntExtra("foreground_state", -2)) {
case 0: // PreciseCallState.PRECISE_CALL_STATE_IDLE:
System.out.println("IDLE");
break;
case 3: // PreciseCallState.PRECISE_CALL_STATE_DIALING:
System.out.println("DIALING");
break;
case 4: // PreciseCallState.PRECISE_CALL_STATE_ALERTING:
System.out.println("ALERTING");
break;
case 1: // PreciseCallState.PRECISE_CALL_STATE_ACTIVE:
System.out.println("ACTIVE");
break;
}
}
}
Я заменил некоторые константы их значениями, потому что я видел много путаницы среди людей, незнакомых с концепцией отражения (для простоты). Оповещение — это в основном состояние, когда приемник действительно звонит! и это без учета времени установления вызова! поэтому вы можете получить время в этом операторе case, используя
System.currentTimeMillis();
или любой другой формат, который вы предпочитаете!
person
Ali Tariq
schedule
24.03.2018