2017-02-04 21 views
1

У меня есть IntentService, где я пытаюсь отобразить диалоговое окно с сообщением после завершения некоторых процедур.Отображение диалога с помощью IntentService?

Я могу показать Тост делая

handler.post(new Runnable() { 
     @Override 
     public void run() { 
      Toast.makeText(ServiceName.this, message, Toast.LENGTH_LONG); 
     } 
    }); 

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

handler.post(new Runnable() { 
     @Override 
     public void run() { 
      new AlertDialog.Builder(ServiceName.this) 
        .setTitle("Title") 
        .setMessage(message) 
        .create().show(); 
     } 
    }); 

Он выдает ошибку:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

Я не хочу идти возиться с моей Manifest потому, что может повлиять на все остальное в приложении, но есть ли путь вокруг этого? Могу ли я каким-либо образом передать AppCompatActivity в IntentService? Могу ли я каким-то образом связать IntentService с AppCompat? Какие у меня варианты?

Edit: Попытка использовать диалоговое деятельностный подход:

Intent intent = new Intent(ServiceName.this, ActivityWithDialogTheme.class); 
intent.putExtra(ActivityWithDialogTheme.MESSAGE, message); 
startActivity(intent); 

ответ

1

Can I somehow pass an AppCompatActivity into the IntentService?

No.

Can I somehow associate the IntentService with AppCompat?

No.

What are my options?

Создание диалога тематикой деятельности, и начните эту деятельность со своего сервиса.

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

+0

Что вы хотите сказать, разместив на автобусе событий? Как получить активность, чтобы поднять ее? Что касается уведомлений, я не знаком, но мне кажется, что хорошо учиться – KaliMa

+0

@KaliMa: «Что вы понимаете, отправляя на автобус событий?» - Я имею в виду использование шины событий (например, «LocalBroadcastManager») (https://github.com/commonsguy/cw-omnibus/tree/master/EventBus/LocalBroadcastManager) или [EventBus] greenrobot (https: // github .com/commonsguy/CW-омнибусный/дерево/ведущий/EventBus/GreenRobot3). «Как мне получить мероприятие, чтобы забрать его?» - это часть использования шины событий. Ссылки ранее в этом комментарии относятся к примерам проектов, демонстрирующих использование обеих этих шин, для пользовательского интерфейса или «Уведомления», являющегося результатом работы службы (в этом случае срабатывает «AlarmManager»). – CommonsWare

+0

Означает ли это, что у меня нет вариантов, если я не пойму, как использовать EventBus в этой ситуации? – KaliMa