0

我正在寻找为whatsapp创建一个应用程序,我需要在其中启动一个带有笑脸集的窗口(例如facebook messenger中的聊天头)。我做到了,但是当我打开whatsapp对话时,会显示一个笑脸集的小按钮,并且它不会消失我关闭了whatsapp。

我怎么能实现这个?这是用于输入表情符号的服务

public class SmileyInputService extends Service {

    private WindowManager windowManager;
    private List<View> chatHeads;
    int f=0;
    private LayoutInflater inflater;

    @Override
    public void onCreate() {
        super.onCreate();
        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
        inflater = LayoutInflater.from(this);
        chatHeads = new ArrayList<View>();
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) { 

     final WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,

            WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);

    if(chatHeads.isEmpty()) {
        final View chatHead = inflater.inflate(R.layout.service_smile_head, null);
        chatHead.findViewById(R.id.btn_dismiss).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                removeChatHead(chatHead);
            }
        });
        chatHead.findViewById(R.id.txt_title).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) { 

                        if(f==0) {
                            chatHead.findViewById(R.id.smilieylisting).setVisibility(LinearLayout.VISIBLE);

                            f=1;
                        } 
                        else { 
                           chatHead.findViewById(R.id.smilieylisting).setVisibility(LinearLayout.GONE);

                            f=0;
                        }} };
                 chatHead.findViewById(R.id.happyhead).setOnClickListener(new View.OnClickListener() {
                @TargetApi(Build.VERSION_CODES.HONEYCOMB)
                @Override
                public void onClick(View view) {


                  ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);

                    ClipData clip = ClipData.newPlainText("label","[happy]");
                    clipboard.setPrimaryClip(clip);
                }
            });
        chatHead.findViewById(R.id.kisshead).setOnClickListener(new View.OnClickListener() {
            @TargetApi(Build.VERSION_CODES.HONEYCOMB)
            @Override
            public void onClick(View view) {
                ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);

                ClipData clip = ClipData.newPlainText("label","[kiss]");
                clipboard.setPrimaryClip(clip);
            }
        });
        params.gravity=Gravity.LEFT|Gravity.TOP; 
        addChatHead(chatHead, params);

    }
    return super.onStartCommand(intent, flags, startId);
}

public void addChatHead(View chatHead, WindowManager.LayoutParams params) {
    chatHeads.add(chatHead);
    windowManager.addView(chatHead, params);
}

public void removeChatHead(View chatHead) {
    chatHeads.remove(chatHead);
    windowManager.removeView(chatHead);
}

@Override
public void onDestroy() {
    super.onDestroy();
    for (View chatHead : chatHeads) {
        removeChatHead(chatHead);
    }
}

}

这是我的监听事件无障碍服务

Public class ListeningSmileyService extends AccessibilityService {
    AccessibilityServiceInfo info = new AccessibilityServiceInfo();
    public static String currentsmiley;

    @Override
    public void onServiceConnected() {
        info.eventTypes = AccessibilityEvent.TYPE_VIEW_CLICKED| AccessibilityEvent.TYPE_VIEW_FOCUSED| AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED |AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED;

        info.packageNames = new String[]
                {"com.whatsapp"};
        info.feedbackType = AccessibilityServiceInfo.FEEDBACK_ALL_MASK;
        info.notificationTimeout = 100;
        this.setServiceInfo(info);

    }
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        Log.i("event!","clix");
        final int eventType = event.getEventType();
        String eventText = null;
        switch(eventType) {
            case AccessibilityEvent.TYPE_VIEW_CLICKED:
                if(!event.getClassName().equals("android.widget.EditText"))
                    stopService(new Intent(getApplicationContext(),SmileyInputService.class));
                eventText = "Clix: ";
                break;
            case AccessibilityEvent.TYPE_VIEW_FOCUSED |AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED:
                stopService(new Intent(getApplicationContext(),SmileyInputService.class));
                eventText = "Focused: ";
                break;
            case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED:
                 stopService(new Intent(getApplicationContext(),SmileyInputService.class));
                break;
        }

        if(event.getClassName().equals("android.widget.EditText")){
            Log.i("sha","log");
            Intent i=new Intent(getApplicationContext(),SmileyInputService.class);
            startService(i);

        }
     }
    }
4

0 回答 0