Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我可以在contentObserver中创建Alert和Toast吗?_Android_Alert_Toast - Fatal编程技术网

Android 我可以在contentObserver中创建Alert和Toast吗?

Android 我可以在contentObserver中创建Alert和Toast吗?,android,alert,toast,Android,Alert,Toast,我无法编写代码在短信的ContentObserver中创建警报和toast。我无法获取ContentObserver的上下文。谁来帮帮我。提前谢谢 MyObserver yourObserver = new MyObserver(new Handler()); ContentResolver contentResolver = this.getContentResolver(); contentResolver.registerContentObserver(

我无法编写代码在短信的ContentObserver中创建警报和toast。我无法获取ContentObserver的上下文。谁来帮帮我。提前谢谢

 MyObserver yourObserver = new MyObserver(new Handler());

        ContentResolver contentResolver = this.getContentResolver();
        contentResolver.registerContentObserver(Uri.parse("content://sms"),true, yourObserver);
&

class YourObserver extends ContentObserver {

    //Context context = new ContentObserver()
    AlertDialog.Builder builder;
    AlertDialog alert;
    public YourObserver(Handler handler) {
        super(handler);
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
       Toast.makeText(???,"SENT..!!", Toast.LENGTH_LONG).show();
        System.out.println("Hey =++++++++++++++++++++++_______+++++++++++++++++++++++++++++");
        builder = new AlertDialog.Builder(???);
        builder.setMessage("Are you sure??");
        builder.setCancelable(false);
        builder.setPositiveButton("Yes",new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(???, "Okay",Toast.LENGTH_LONG).show();
            }
        });

        builder.setNegativeButton("No",new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                alert.cancel(); 
            }
        });
        alert = builder.create();
        alert.show();
    }
}
您可以使用handler.post()来显示Toast

public SMSSentObserver(Handler handler, Context context) {
    super(handler);
    this.handler = handler;
    m_Context = context;
}

@Override
public void onChange(boolean selfChange) {
    super.onChange(selfChange);
    handler.post(new Runnable() {

        @Override
        public void run() {

            Toast.makeText(m_Context, "Toast", Toast.LENGTH_SHORT).show();
        }
    });

您可以将活动的上下文传递给
ContentObserver

ContentResolver observer = this.getContentResolver();
        observer.registerContentObserver(SMS_URI, true,
                                   new MyObserver(new Handler(), this));
MyObserver
类中的

   Activity mActivity;
    public MyContentObserver(Handler handler, Activity mActivity) {
        super(handler);
        this.mActivity= mActivity;
    }

您面临的问题是什么?您应该发布代码。“??”这些是我的问题。是的,请检查下面的答案您需要将上下文传递给ContentObserver类。先生,请您告诉我将上下文发送给ContentObserver的过程。它对Toast非常有效,但对alert不起作用。当我包含它提供的警报代码时,应用程序意外停止强制关闭线程带未捕获异常退出,致命异常:main,无法添加窗口--令牌null不适用于应用程序03-30 14:31:42.306:W/dalvikvm(1113):threadid=1:带未捕获异常退出的线程(group=0x40015560)03-30 14:31:42.316:E/AndroidRuntime(1113):致命异常:main 03-30 14:31:42.316:E/AndroidRuntime(1113):android.view.WindowManager$BadTokenException:无法添加窗口--标记null不适用于应用程序03-30 14:31:42.316:E/AndroidRuntime(1113):位于android.view.ViewRoot.setView(ViewRoot.java:531)03-30 14:31:42.316:E/AndroidRuntime(1113):位于android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)03-30 14:31:42.316:E/AndroidRuntime(1113):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)03-30 14:31:42.316:E/AndroidRuntime(1113):在android.app.Dialog.show(Dialog.java:241)03-30 14:31:42.316:E/AndroidRuntime(1113):在com.cdac.service.MyObserver.onChange(MyObserver.java:54)03-30 14:31:42.316:E/idruntime(1113):在android.database.ContentObserver$NotificationRunnable.run(ContentObserver.java:43)03-30 14:31:42.316:E/AndroidRuntime(1113):在android.os.Handler.handleCallback(Handler.java:587)03-30 14:31:42.316:E/AndroidRuntime(1113):在android.os.Handler.Handler.dispatchMessage(Handler.java:92)03-30 14:31:42.316:E/AndroidRuntime(1113):在android.os.Looper.loop(Looper.java:123)03-30 14:31:42.316:E/AndroidRuntime(1113):在android.app.ActivityThread.main(ActivityThread.java:3683)03-30 14:31:42.316:E/AndroidRuntime(1113):在java.lang.reflect.Method.invokenactive(本机方法)03-30 14:31:42.316:E/AndroidRuntime(1113):在java.lang.reflect.Method.Method.invoke(方法:507)顺便说一下,如果您希望避免在构造函数中传递上下文,并且您的观察者是活动的内部类,那么您可以使用getApplicationContext()获取上下文