为什么我不能在扩展 BroadcastReceiver 的 activity 中使用 imageview?

Why I am not able to use imageview in an activity which extends BroadcastReceiver?

下面是我的 ChatHeadService class,我正在 oncreate() 方法中创建一个新的图像视图,我可以看到 imageview.I 正在以类似于聊天头和我的 OnTouchListener 的方式使用它正在工作,但 onClickListener 不工作我想在单击图像视图时打开一个新的 activity,但它不工作,即使 toast 没有提前 appear.Thanks 寻求任何帮助。

package com.tarun.notifyme2;

    import android.app.Service;
    import android.content.Intent;
    import android.graphics.PixelFormat;
    import android.os.IBinder;
    import android.util.Log;
    import android.view.Gravity;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.WindowManager;
    import android.widget.ImageView;
    import android.widget.Toast;

    public class ChatHeadService extends Service {

        private WindowManager windowManager;
        private ImageView chatHead;
        WindowManager.LayoutParams params;
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            int res = super.onStartCommand(intent, flags, startId);
            return res;
        }
        @Override
        public void onCreate() {
            super.onCreate();

            windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

            chatHead = new ImageView(this);
            chatHead.setImageResource(R.drawable.app_icon);
            chatHead.setClickable(true);
            params= new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.TYPE_PHONE,
                    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                    PixelFormat.TRANSLUCENT);

            params.gravity = Gravity.TOP | Gravity.LEFT;
            params.x = 0;
            params.y = 200;
            chatHead.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(getApplicationContext(),"You clicked  the imageview",Toast.LENGTH_LONG).show();
                    Log.i("tag","You clicked the imageview");
                    Intent i = new Intent(view.getContext(),SendNoti.class);
                    startActivity(i);
                    stopSelf();
                }
            });

            //this code is for dragging the chat head
            chatHead.setOnTouchListener(new View.OnTouchListener() {
                private int initialX;
                private int initialY;
                private float initialTouchX;
                private float initialTouchY;


                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        initialX = params.x;
                        initialY = params.y;
                        initialTouchX = event.getRawX();
                        initialTouchY = event.getRawY();
                        return true;
                    case MotionEvent.ACTION_UP:
                        return true;
                    case MotionEvent.ACTION_MOVE:
                        params.x = initialX
                                + (int) (event.getRawX() - initialTouchX);
                        params.y = initialY
                                + (int) (event.getRawY() - initialTouchY);
                        windowManager.updateViewLayout(chatHead, params);
                        return true;
                    default:
                        return false;
                    }
                }
            });
            windowManager.addView(chatHead, params);
        }

        @Override
        public void onDestroy() {
            super.onDestroy();
            if (chatHead != null)
                windowManager.removeView(chatHead);
            stopSelf();
        }

        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
        }
    }

您 "swallowing" 您在 onTouch(View v, MotionEvent event) 中的触摸事件 return 为真(意味着您已完成所有需要的操作,不会通知 onClick、onLongClick 等)。你可以 "emulate" onClick 通过在 ACTION_MOVE 中设置一些标志并在 ACTION_UP 中检查它是否最后 "touch action" 正在移动或只是 down/up 点击(然后 return false 或者只写你的代码而不设置任何 onClick)