В моем приложении для Android я регистрирую несколько широковещательных приемников, которые включают в себя: WiFi, экран и активность. Приложение работает плавно на Moto g и Samsung G3, но отключилось включение/выключение экрана, подключение/отключение Wi-Fi и события активности на другом телефоне после трех дней плавного выполнения. Поскольку приложение находится на пользовательском телефоне, я не знаю модель/сделать. Помимо обнаружения события, обычное определение местоположения работает нормально (это запланировано каждые 10 минут). Любые идеи, что может быть неправильным? В противном случае на моих тестовых устройствах все еще работает нормально (тестирование продолжается более 2 недель). Для справки ниже приведен код только для датчика экрана. Кроме того, я пытался зарегистрировать приемник в onstartcommand, но он не работает на моих тестовых устройств (см комментируемой части в screenService)правильный способ регистрации широковещательного приемника android
MainActivity:
Intent intentscreen = new Intent(getApplicationContext(), ScreenService.class);
startService(intentscreen);
ScreenService:
private final BroadcastReceiver mybroadcast = new ScreenReceiver();
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
/* if (intent!=null)
{
IntentFilter screenStateFilter = new IntentFilter();
screenStateFilter.addAction(Intent.ACTION_SCREEN_ON);
screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(mybroadcast, screenStateFilter);
}*/
return START_STICKY;
}
@Override
public void onCreate(){
super.onCreate();
IntentFilter screenStateFilter = new IntentFilter();
screenStateFilter.addAction(Intent.ACTION_SCREEN_ON);
screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(mybroadcast, screenStateFilter);
}
@Override
public void onDestroy()
{
super.onDestroy();
unregisterReceiver(mybroadcast);
}
}
ScreenReceiver:
public class ScreenReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
Log.i("Check","Screen went OFF");
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Log.i("Check","Screen went ON");
}
}
Благодарим вас за ответ. Вы видите код выше и видите, есть ли ошибка? Приложение работает отлично на Samsung S3, Moto g, Nexus, но перестает получать экран/Wi-Fi/мероприятие (после трех гладких дней) на фоне примечаний Samsung. Любое предложение? –
Почему бы вам не попробовать использовать 'intent.getStringExtra' вместо' намерения.getAction'. Это работало для меня в предыдущем приложении, которое я строил, но в том, что я использовал приемник вызовов, но насколько он может быть другим? –
Как я могу использовать его для экрана, например? Кроме того, код выглядит нормально? Я немного потерял, почему это происходит, по каким-либо причинам? –