0

Я отправляю Broadcast из службы, а затем получаю его обратно из внутреннего класса BroadcastReceiver. Я должен показать AlertDialog основанный на некоторой логики, но при попытке сделать это, я получаю эту ошибку во время выполнения: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.Получение 'Вам нужно использовать тему Theme.PpCompat (или потомка) с этим действием.' при попытке показать AlertDialog от BroadcastReceiver

Вот MyBroadcastReceiver класс:

public class MyBroadcastReceiver extends BroadcastReceiver { 

     public MyBroadcastReceiver(){ 
      super(); 
     } 

     @Override public void onReceive(final Context context, Intent intent) { 

      if (intent.getAction() != null && intent.getAction().equals(getString(R.string.broadcast_id))) { 

      Intent intent1 = new Intent(MyService.this, MainActivity.class); 
      intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent1); 


        @Override 
        public void run() { 
         if (someCondition) { 

          android.support.v7.app.AlertDialog.Builder builder1 = new android.support.v7.app.AlertDialog.Builder(getBaseContext()); 
          builder1.setView(R.layout.dialog); 

          builder1.setPositiveButton(
            "OK", 
            new DialogInterface.OnClickListener() { 
             public void onClick(DialogInterface dialog, int id) { 
             Intent notificationIntent = new Intent(getBaseContext(), Notification.class); 
             notificationIntent.putExtra(Notification.NOTIFICATION, getNotificationGame()); 
             PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), m, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
             AlarmManager alarmManager = (AlarmManager) getBaseContext().getSystemService(Context.ALARM_SERVICE); 
             alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, finalFutureInMillis, pendingIntent); 
             postMethod(MainActivity.name, MainActivity.uidOfProfilePic, String.valueOf(MainActivity.currentLatDouble), String.valueOf(MainActivity.currentLngDouble), null, s, v, sA, requestID, user.getUid(), nP); 
              dialog.cancel(); 
             } 
            }); 

          final android.support.v7.app.AlertDialog alert11 = builder1.create(); 
          alert11.setCancelable(false); 
          alert11.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 
          // error on line below 
          alert11.show(); 

          } 
         } 

      } 
     } 
    } 

Я искал в интернете для этого и придумали с this, который предлагает создать активность и сделать в нем код AlertDialog, но, как вы можете видеть, я выполняю некоторую работу, когда пользователь нажимает OK и этот код извлекается в Service, и я не смогу получить к нему доступ из другого вида деятельности ,

Пожалуйста, дайте мне знать Что теперь делать?

+0

Какую тему вы используете в своей деятельности ?, вы используете панель инструментов? – Diekrul

+0

@ Diekrul в этой деятельности: 'MainActivity.class'? или в котором передатчик является? потому что этот вещательный приемник находится в Службе, а не в действии, как сказано в вопросе. –

ответ

0

Hammad, документация говорит, что вы не можете запустить всплывающее диалоговое окно в вашей реализации onReceive(). (как говорят ответы) https://stackoverflow.com/a/4855397/7542998

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

Однако, как говорят это другой ответ

(https://stackoverflow.com/a/16332260/7542998) вы можете попробовать с NotificationManager API.

В обоих ссылках есть хорошие ответы для достижения того, чего вы хотите.

Надеюсь, это поможет.

Смежные вопросы

 Смежные вопросы