Я делаю приложение, которое блокирует некоторые звонки. У меня есть радиоприемник, чтобы это исправить. Но когда я убиваю свое приложение (вручную или системой), приемник не работает.
Я подумал, что мне нужна служба, которая выполняет широковещательный приемник или блокирует вызовы для себя. Как я могу это сделать?
Спасибо за преимущество.
РЕДАКТИРОВАТЬ Мой класс приемника:
public class IncomingCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ITelephony telephonyService;
try {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
String number = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
try {
Method m = tm.getClass().getDeclaredMethod("getITelephony");
m.setAccessible(true);
telephonyService = (ITelephony) m.invoke(tm);
if ((number != null)) {
telephonyService.endCall();
Toast.makeText(context, "Ending the call from: " + number, Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(context, "Ring " + number, Toast.LENGTH_SHORT).show();
}
if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
Toast.makeText(context, "Answered " + number, Toast.LENGTH_SHORT).show();
}
if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)) {
Toast.makeText(context, "Idle " + number, Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
Манифест моего получателя:
<receiver
android:name = ".ARQ.IncomingCallReceiver"
android:enabled = "true"
android:exported = "true">
<intent-filter>
<action android:name = "android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
Да, у меня в манифесте есть получатель. Но когда приложение убито, не работает.
вы можете предоставить код своего класса Receiver?
Готово, надеюсь, ты лучше видишь.
при первом взгляде я бы посоветовал проверить, возвращают ли что-нибудь intent.getStringExtra() или intent.getExtra()?
Но когда мое приложение убивают, когда я звоню, ничего не происходит. Неважно, если у намерения чего-то нет?
попробуйте добавить exported = true в ваш широковещательный приемник в файле манифеста
Это сделано. Я отправлю вам приемник. Видеть.
вы добавили получателя в свой файл манифеста?