Я новичок в разработке Android.Я пытаюсь разработать виджет с кнопкой, которая переключает, будет ли устройство автоматически отвечать на входящие вызовы.
Я начал с создания класса, расширяющего AppWidgetProvider.Я использую SharedPreferences для хранения состояния кнопки виджета.В методе OnReceive (Context, Intent) я использую намерение запустить IntentService, который регистрирует BroadcastReceiver для прослушивания изменений состояния телефона.Тем не менее, я не могу понять, как отменить регистрацию BroadcastReceiver, когда виджет отключен - мой код продолжает отслеживать состояние телефона, независимо от состояния кнопки виджета.Является ли это возможным?Или есть другой способ, которым я могу остановить PhoneStateListener?
Спасибо.
ОБНОВЛЕНИЕ : Вот изменения к коду
Манифест: я поместил BroadcastReceiver с фильтром намерений android.intent.action.PHONE_STATE в манифест
В AppWidgetProvider:
ComponentName componentName = new ComponentName(context, PhoneStateBroadcastReceiver.class);
//use to enable the broadcast receiver
packageManager.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
//use to disable the broadcast receiver
packageManager.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
В BroadcastReceiver:
@Override
public void onReceive(Context context, Intent intent) {
//check call state
TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
if(tm.getCallState()==TelephonyManager.CALL_STATE_RINGING){
try{
//wait 2 seconds then answer the call
Thread.sleep(2000);
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
ITelephony telephony = (ITelephony)m.invoke(tm);
telephony.silenceRinger();
telephony.answerRingingCall();
} catch(Exception e){}
}
}
Не нужен PhoneStateListener ...
Облом, который это не сработает на 2.3 +