我正在寻找为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);
}
}
}