所以我希望制作一个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;
}
}
答案 0 :(得分:3)
我以为我通过从活动类传递活动上下文找到了一种方法,但应用程序崩溃了
您无法通过构造函数自行创建活动的工作实例。
我遇到的问题是我必须从广播接收器上显示小吃吧。
这不太可能。欢迎您开始一项活动(可能使用对话框主题,不占用整个屏幕)。或者,您可以显示Toast
。或者,您可以提高Notification
。这些是BroadcastReceiver
的主要UI选项。 Snackbar
设计用于活动,而不是BroadcastReceiver
。