Когда я называю тостом изнутри сервиса - новая вкладка «А» с сообщением «Источник не найден» и «Timer.Class» в вкладке Название появляется

StackOverflow https://stackoverflow.com/questions/3698732

Вопрос

Я использую Eclipse и запустить приложение в режиме отладки. У меня есть класс - Aastartshere, полученный из табатности. Этот полученный класс запускает услугу (AASERVICE). AASERVICE SETUPS TIMER / TIMERTARK AACALLBACK. Изнутри этот обратный вызов я настроил тост, используя уведомление. Когда Aacallback вызывает тост, параметры, передаваемые toast, кажутся нормальными, но ничего не появляется или не отображается на экране, вместо появляется новая вкладка (под названием Timer.Class) ...

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

 
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"; 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), имеет следующий источник редактора файлов текстового класса не найден, банка этого файла класса принадлежит контейнеру «Android 2.1», который не позволяет модификациям исходных вложений // Компиляция от таймера. Java (версия 1.5: 49.0, супер бит):

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

Это было полезно?

Решение

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

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();
  }
}

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top