, так что я ищу, чтобы создать плагин для 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;
}
}
ok, dang. Надеюсь, это возможно. Спасибо за ответ. –
@JoeSmith Мне придется с уважением не согласиться с @CommonsWare. Это возможно, если контекст является экземпляром 'Activity' - мы могли бы использовать' android.R.id.content' для получения корневого представления активности и передать его в 'SnackBar' – Abhijit
@Abhijit: вопрос о создании плагина Tasker. «FireReceiver» должен быть зарегистрирован в манифесте. Когда 'FireReceiver' вызывается с' onReceive() ', в процессе приложения может не быть никакой активности, так как этот процесс мог быть создан несколько миллисекунд назад. Даже если есть * активность, это, вероятно, не на переднем плане, и поэтому наличие этого действия показывает, что «Snackbar» не будет отображаться для пользователя. – CommonsWare