Когда я вызываю Toast изнутри сервиса, появляется новая вкладка с сообщением «Источник не найден» и «Timer.class» в заголовке вкладки. - PullRequest
1 голос
/ 13 сентября 2010

Я использую Eclipse и запускаю приложение в режиме отладки. У меня есть класс - AAStartsHere, полученный из TabActivity. Этот производный класс запускает службу (AAservice). AAService устанавливает функцию таймера / таймера AACallback. Внутри этого обратного вызова я настроил тост, используя уведомления. Когда AAcallback вызывает Toast, параметры, переданные Toast, выглядят нормально, но на экране ничего не появляется и не отображается, вместо этого появляется новая вкладка (с именем Timer.class) ...

Вот фрагмент кода

 <code>
AAStartsHere extends TabActivity {
  :<br>
  Intent serviceIntent = new Intent (this, AAservice,...);
  :
  startservice(serviceIntent);
  :
}
TimerTask execAACallback = newTimerTask { run() {AAcallback(); } };
AAService extends Service{
    onCreate() {
      :
      AANotifcation = new Notification(....);
      :
      AATimer.scheduleAtFixedRate(execAACallback, ...)
   }
   AACallback() {
    : 
    String svcName = Context.NOTIFICATION_SERVICE;
    NotificationManager notiMgr = (NotificationManager) getSystemService(svcName);
     Context context = getApplicationContext();
     String text = "text goes here";
     String title  = "Title goes here";
     Intent AAIntent = new Intent(AAService.this,  AAStartsHere.class);
     PendingIntent AAPendingIntent =  PendingIntent.getActivity(context, 0, AAIntent, 0);
     AANotification.setLatestEventInfo(context, title, text, AAPendingIntent);
     AANotification.when = java.lang.System.currentTimeMillis();
     notiMgr.notify(AA_NOTIFICATION_ID, AANotification);
     Toast.makeText(context, title, Toast.LENGTH_LONG).show();
     :
  }
}

Новая вкладка, которая отображается (в режиме Eclipse / debug), имеет следующий текст Редактор файлов классов источник не найден JAR-файл этого класса принадлежит контейнеру «Android 2.1», который не допускает модификации исходных вложений. // Скомпилировано из timer.java (версия 1.5: 49.0, супер бит) :

Пожалуйста, дайте мне знать ваши мысли - что мне не хватает? Спасибо за помощь и усилия. Аби

Ответы [ 2 ]

0 голосов
/ 21 апреля 2013

Иногда тост не отображается из службы, если он остается слишком длинным, что включает в себя временной интервал тоста, который будет показан.Попробуйте показать сообщение тоста в конце процесса вашего обслуживания, например:

AAStartsHere extends TabActivity {
:

  Intent serviceIntent = new Intent (this, AAservice,...);
  :
  startservice(serviceIntent);
  :
}
TimerTask execAACallback = newTimerTask { run() {AAcallback(); } };
AAService extends Service{
    onCreate() {
      :
      AANotifcation = new Notification(....);
      :
      AATimer.scheduleAtFixedRate(execAACallback, ...)
   }
   AACallback() {
      : 
      String svcName = Context.NOTIFICATION_SERVICE;
      NotificationManager notiMgr = (NotificationManager) getSystemService(svcName);
      Context context = getApplicationContext();
      String text = "text goes here";
      Intent AAIntent = new Intent(AAService.this,  AAStartsHere.class);
      PendingIntent AAPendingIntent =  PendingIntent.getActivity(context, 0, AAIntent, 0);
      AANotification.setLatestEventInfo(context, title, text, AAPendingIntent);
      AANotification.when = java.lang.System.currentTimeMillis();
      notiMgr.notify(AA_NOTIFICATION_ID, AANotification);
      :
  }
  onStartCommand() {
     String title  = "Title goes here";
     AACallBack();
     Toast.makeText(context, title, Toast.LENGTH_LONG).show();
  }
}
0 голосов
/ 13 сентября 2010

getApplicationContext () возвращает вам экземпляр класса Application, а не действие.Вы не можете использовать это для отображения тостов, вы должны использовать контекст действия.

...