从广播接收器显示小吃吧?

时间:2015-10-17 00:13:00

标签: java android

所以我希望制作一个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;
    }
}

1 个答案:

答案 0 :(得分:3)

  

我以为我通过从活动类传递活动上下文找到了一种方法,但应用程序崩溃了

您无法通过构造函数自行创建活动的工作实例。

  

我遇到的问题是我必须从广播接收器上显示小吃吧。

这不太可能。欢迎您开始一项活动(可能使用对话框主题,不占用整个屏幕)。或者,您可以显示Toast。或者,您可以提高Notification。这些是BroadcastReceiver的主要UI选项。 Snackbar设计用于活动,而不是BroadcastReceiver