Гость
Форумы / Android [игнор отключен] [закрыт для гостей] / ошибка AlarmManager / 10 сообщений из 10, страница 1 из 1
06.11.2014, 17:25
    #38797559
НикоДимиден
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка AlarmManager
Здравствуйте!
Ранее я создал AlarmManager с public class Ressive extends BroadcastReceiver ,все работало хорошо ,в такой связке . Но после перезагрузки телефона , AlarmManager уничтожался . Поэтому я решил создать ещё один BroadcastReceiver (BroadcastReceiver+ БД) , который будет восстанавливать будильник после перезагрузки телефона . написав его он начал как-то странно работать с ошибками. Нельзя сказать что и не работает и нельзя сказать обратное.
При загрузки телефона он срабатывает . Устанавливает будильник на 60 секунд . После истечения 60 секунд , появляется та активность которая должна вызваться ( она отлично вызывается если установить будильник через Activity ) , и стразу исчезает . В логах появляются ошибки.
У меня есть предположения ( и я уверен на 90%) что все дело в MyAlarms
Что то там с контекстом неправильно . Но что именно пока не могу понять(

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
public class RessiveT extends BroadcastReceiver {

 static String str="123";
 private final String BOOT_ACTION = "android.intent.action.BOOT_COMPLETED";
 Context mContext;

 @Override
 public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
     
       String action = intent.getAction();
       if (action.equalsIgnoreCase(BOOT_ACTION)) {	
       Log.i("Запускаем наш будильник T11",str);     
       MyAlarms(context);  
       }
      
	}


 static void MyAlarms(Context ctxt) {
	    AlarmManager mgr=
	        (AlarmManager)ctxt.getSystemService(Context.ALARM_SERVICE);
	    Intent i=new Intent(MainActivity.PRIOMNIK);
	    PendingIntent pi=PendingIntent.getBroadcast(ctxt, 0, i, 0);
	    mgr.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+60000, pi);
	  }
	
}







11-06 13:57:14.409: E/Trace(619): error opening trace file: No such file or directory (2)
11-06 13:57:54.520: E/AndroidRuntime(619): FATAL EXCEPTION: main
11-06 13:57:54.520: E/AndroidRuntime(619): java.lang.RuntimeException: Unable to start receiver com.example.alarmmanager2.Ressive: java.lang.NullPointerException
11-06 13:57:54.520: E/AndroidRuntime(619): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2236)
11-06 13:57:54.520: E/AndroidRuntime(619): at android.app.ActivityThread.access$1500(ActivityThread.java:130)
11-06 13:57:54.520: E/AndroidRuntime(619): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271)
11-06 13:57:54.520: E/AndroidRuntime(619): at android.os.Handler.dispatchMessage(Handler.java:99)
11-06 13:57:54.520: E/AndroidRuntime(619): at android.os.Looper.loop(Looper.java:137)
11-06 13:57:54.520: E/AndroidRuntime(619): at android.app.ActivityThread.main(ActivityThread.java:4745)
11-06 13:57:54.520: E/AndroidRuntime(619): at java.lang.reflect.Method.invokeNative(Native Method)
11-06 13:57:54.520: E/AndroidRuntime(619): at java.lang.reflect.Method.invoke(Method.java:511)
11-06 13:57:54.520: E/AndroidRuntime(619): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-06 13:57:54.520: E/AndroidRuntime(619): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-06 13:57:54.520: E/AndroidRuntime(619): at dalvik.system.NativeStart.main(Native Method)
11-06 13:57:54.520: E/AndroidRuntime(619): Caused by: java.lang.NullPointerException
11-06 13:57:54.520: E/AndroidRuntime(619): at com.example.alarmmanager2.Ressive.onReceive(Ressive.java:48)
11-06 13:57:54.520: E/AndroidRuntime(619): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2229)
11-06 13:57:54.520: E/AndroidRuntime(619): ... 10 more
...
Рейтинг: 0 / 0
06.11.2014, 17:48
    #38797596
НикоДимиден
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка AlarmManager
Предположительно ошибка возникает в этом промежутке кода

(AlarmManager)ctxt.getSystemService(Context.ALARM_SERVICE);
...
Рейтинг: 0 / 0
06.11.2014, 18:09
    #38797628
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка AlarmManager
а зачем он у вас статичный ?

и второе, нельзя что ли выкинуть на сторону сервиса логику и что бы сервис все восстановил и самоубился.
...
Рейтинг: 0 / 0
06.11.2014, 19:11
    #38797693
НикоДимиден
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка AlarmManager
Джибс,

static убрал , он там и вправду не нужен.
Вы имеете в виду создать свой сервис в котором будет функция создания будильника?
...
Рейтинг: 0 / 0
06.11.2014, 19:17
    #38797697
НикоДимиден
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка AlarmManager
static я для проверки делал
...
Рейтинг: 0 / 0
06.11.2014, 20:39
    #38797769
НикоДимиден
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка AlarmManager
Вот создал свой сервис . При его вызове, точно такое-же происходит , как я описывал выше.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
public class StarterService extends Service {

	String TAG="MyService";
	
	
	@Override
	public void onStart(Intent intent, int startid) {
		Log.d(TAG, "сервис запущен");
		String  PRIOMNIK = "com.example.alarmmanager2.MY.PROGECT";
		Intent intent1 = new Intent(PRIOMNIK); 

		AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
		PendingIntent pi = PendingIntent.getBroadcast(getBaseContext(), 0, intent1, 0); 
	    manager.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+5000, pi);    
	    stopSelfResult(startid); // Остановим сервис
	}
	

	@Override
	public void onDestroy() {
	
	
	Log.d(TAG, "onDestroy");
	}
	

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
...
Рейтинг: 0 / 0
06.11.2014, 21:36
    #38797800
НикоДимиден
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка AlarmManager
У...Ху...Ху... Решил задачу! Я в первом рессивере не удалил метод удаления пайджинтента.

MainActivity.pi.cancel(); // Скидываем наш PendingIntent с системы

Вот так вот.
...
Рейтинг: 0 / 0
06.11.2014, 22:19
    #38797834
НикоДимиден
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка AlarmManager
Кто знает , может можно не удалять PendingIntent который уже отработал ? Не будет ли он мешать системе? Или лучше все таки удалять их, после использования?

pi.cancel();
...
Рейтинг: 0 / 0
07.11.2014, 09:28
    #38798154
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка AlarmManager
НикоДимиденMainActivity.pi.cancel(); // Скидываем наш PendingIntent с системы
Там вообще-то есть флаги:
авторIf you only need one PendingIntent active at a time for any of the Intents you will use, then you can alternatively use the flags FLAG_CANCEL_CURRENT or FLAG_UPDATE_CURRENT to either cancel or modify whatever current PendingIntent is associated with the Intent you are supplying.
НикоДимиденКто знает , может можно не удалять PendingIntent который уже отработал ?
За собой принято убирать. Особенно с учетом, что оно может жить, даже если приложение прибито.
авторA PendingIntent itself is simply a reference to a token maintained by the system describing the original data used to retrieve it. This means that, even if its owning application's process is killed, the PendingIntent itself will remain usable from other processes that have been given it. If the creating application later re-retrieves the same kind of PendingIntent (same operation, same Intent action, data, categories, and components, and same flags), it will receive a PendingIntent representing the same token if that is still valid, and can thus call cancel() to remove it.
...
Рейтинг: 0 / 0
07.11.2014, 10:00
    #38798192
НикоДимиден
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка AlarmManager
wadman,
Хех. Буду канслить тогда. Спасибо!
...
Рейтинг: 0 / 0
Форумы / Android [игнор отключен] [закрыт для гостей] / ошибка AlarmManager / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]