2015-10-17 3 views
1

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

Вот класс приемника:

public final class FireReceiver extends BroadcastReceiver { 

    Maker maker; 

    /** 
    * @param context {@inheritDoc}. 
    * @param intent the incoming {@link com.twofortyfouram.locale.Intent#ACTION_FIRE_SETTING} Intent. This 
    *    should contain the {@link com.twofortyfouram.locale.Intent#EXTRA_BUNDLE} that was saved by 
    *    {@link SnackbarActivity} and later broadcast by Locale. 
    */ 
    @Override 
    public void onReceive(final Context context, final Intent intent) { 
     /* 
     * Always be strict on input parameters! A malicious third-party app could send a malformed Intent. 
     */ 
     if (!com.twofortyfouram.locale.Intent.ACTION_FIRE_SETTING.equals(intent.getAction())) { 
      if (Constants.IS_LOGGABLE) 
       Log.e(Constants.LOG_TAG, String.format(Locale.US, "Received unexpected Intent action %s", intent.getAction())); //$NON-NLS-1$ 
      return; 
     } 

     BundleScrubber.scrub(intent); 

     final Bundle bundle = intent.getBundleExtra(com.twofortyfouram.locale.Intent.EXTRA_BUNDLE); 
     BundleScrubber.scrub(bundle); 

     if (PluginBundleManager.isBundleValid(bundle)) { 
      final String message = bundle.getString(PluginBundleManager.BUNDLE_EXTRA_STRING_MESSAGE); 
      final String button = bundle.getString(PluginBundleManager.BUNDLE_EXTRA_STRING_BUTTON); 
      final String mode = bundle.getString(PluginBundleManager.BUNDLE_EXTRA_STRING_MODE); 
      if (maker == null) { 
       maker = new Maker(); 
      } 
      //maker.createSnackbar(message, button, mode); 
      Snackbar.make(maker.getView(), message, Snackbar.LENGTH_SHORT).setAction(button, new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

       } 
      }).show(); 
     } 
    } 
} 

Вот класс Maker:

public class Maker extends Activity { 

    public void createSnackbar(String Main, String Button, String Mode) { 
     if (Mode.equals("Short")) { 
      Snackbar.make(findViewById(android.R.id.content), Main, Snackbar.LENGTH_SHORT).setAction(Button, new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

       } 
      }).show(); 
     } else { 
      Snackbar.make(findViewById(android.R.id.content), Main, Snackbar.LENGTH_LONG).setAction(Button, new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

       } 
      }).show(); 
     } 
    } 

    public View getView() { 
     View view = findViewById(android.R.id.content); 
     return view; 
    } 
} 

ответ

3

Я думал, что я нашел способ, передавая контекст деятельности из класса деятельности, но приложение просто сбрасывается

Вы не можете создать рабочий экземпляр своей деятельности lf через конструктор.

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

Это не возможно. Вы можете начать работу (возможно, используя тему диалога, которая не занимает весь экран). Или, вы можете показать Toast. Или, вы можете поднять Notification. Это ваши основные параметры пользовательского интерфейса от BroadcastReceiver. A Snackbar предназначен для использования от деятельности, а не от BroadcastReceiver.

+0

ok, dang. Надеюсь, это возможно. Спасибо за ответ. –

+0

@JoeSmith Мне придется с уважением не согласиться с @CommonsWare. Это возможно, если контекст является экземпляром 'Activity' - мы могли бы использовать' android.R.id.content' для получения корневого представления активности и передать его в 'SnackBar' – Abhijit

+0

@Abhijit: вопрос о создании плагина Tasker. «FireReceiver» должен быть зарегистрирован в манифесте. Когда 'FireReceiver' вызывается с' onReceive() ', в процессе приложения может не быть никакой активности, так как этот процесс мог быть создан несколько миллисекунд назад. Даже если есть * активность, это, вероятно, не на переднем плане, и поэтому наличие этого действия показывает, что «Snackbar» не будет отображаться для пользователя. – CommonsWare

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