无法通过broadcastReceiver调用方法

时间:2013-02-26 03:34:47

标签: android broadcastreceiver

我试图通过传递上下文来调用一个方法(postMessage),但是不能正常工作。

错误是什么?我尝试过很多东西,但仍然没有用。

 public class AlarmReceiver extends BroadcastReceiver implements
            OnActivityResultListener {


        public void onReceive(Context context, Intent intent) {
            try {
         controler(context); 

            } catch (Exception e) {
                Toast.makeText(
                        context,
                        "There was an error somewhere",
                        Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }

        }

    public void controler(Context context) {
  String radioButtonName = MAinActivity.actionAlarmName(radioButtonName);

            if (radioButtonName.equals("1")) {
        //      TODO
            } else if (radioButtonName.equals("2")) {
    postMessage(context);
    }
    }

    public void postMessage(Context context) {

            DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    switch (which) {
                    case DialogInterface.BUTTON_POSITIVE:
                        // Yes button clicked

                        break;

                    case DialogInterface.BUTTON_NEGATIVE:
                        // No button clicked
                        break;
                    }
                }
            };
            AlertDialog.Builder builder = new AlertDialog.Builder(context);
            builder.setMessage("Are you sure?")
                    .setPositiveButton("Yes", dialogClickListener)
                    .setNegativeButton("No", dialogClickListener).show();
        }

4 个答案:

答案 0 :(得分:2)

您在Context的{​​{1}}中收到的onReceive()不是活动上下文,也就是其应用程序上下文。您无法显示具有应用程序上下文的对话框。对话框应始终与BroadcastReceiver

相关联

答案 1 :(得分:1)

在AndroidManifest中添加接收器

<receiver android:name=".AlarmReceiver" android:process=":remote" />

答案 2 :(得分:1)

如果你想在没有活动背景的接收器中显示一个对话框,你可以这样做:

dialog.getWindow.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)

不要忘记在AndroidManifest.xml中添加权限。

答案 3 :(得分:1)

正如Android官方文档中所述,您无法在接收方法中显示对话框。

http://developer.android.com/reference/android/content/BroadcastReceiver.html#onReceive(android.content.Context,android.content.Intent)

即使你想显示一个对话框,你也可以使用另一种方法来启动一个带有对话框样式的活动 您可以启动透明活动,在其创建方法中显示警告对话框。

希望这会有所帮助: