AccessibilityService
을 통해 시스템 백 프레스 이벤트를 보내려고합니다. 내 자신의 앱에없는 경우에만 작동합니다.AccessibilityService - performGlobalAction이 자체 앱에서 작동하지 않습니다.
나는 내 앱에 상관없이 을 performGlobalAction
에서 얻지 만, 내 자체 앱이 아닌 다른 모든 앱에서 이벤트가 실제로 실행된다는 것을 알 수 있습니다. 이전 활동이 표시되거나 이와 유사하다는 의미에서)
왜 이런 현상이 발생합니까? 내 앱은 WindowManager
의 상단에 오버레이가 그려져 있고 모든 것이 작동합니다 (AccessibilityService
이 실행 중이고 내 맞춤 이벤트를 처리하고 있으며 내 이벤트의 성공 메시지를 항상 반환하지만 내 앱은 반대로 반응하지 않습니다 버튼 이벤트).
내 서비스는 다음과 같습니다 :
public class MyAccessibilityService extends AccessibilityService {
public static void sendBackIntent(Context context) {
Intent intent = new Intent(context, MyAccessibilityService.class);
intent.putExtra("action", GLOBAL_ACTION_BACK);
context.startService(intent);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Bundle extras = intent.getExtras();
Integer action = null;
if (extras != null) {
action = extras.getInt("action");
}
if (action != null) {
switch (action) {
case GLOBAL_ACTION_BACK:
boolean result = performGlobalAction(action);
L.d("Action %d executed: %b", action, result);
break;
default:
L.e("Unhandled action %d", action);
break;
}
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
}
@Override
public void onInterrupt() {
}
}
편집
을이 명확하게하기 위해 : 나는 MyAccessibilityService.sendBackIntent(context)
를 통해이 서비스를 시작하지 마십시오
- , 나는 다음과 같은 의도를 보내 :
if (isAccessibilityserviceRunning) MyAccessibilityService.sendBackIntent(context)
- sys를 통해 서비스를 시작합니다. 임시 서비스 메뉴를 활성화하고 이후에 자동으로 시스템을 시작하도록하십시오.
AccessibilityService
의 모든 것을accessibilityservice.xml
에 설정하고이를 사용하여 내 서비스 설정을 정의하면이 이벤트가 완벽하게 작동합니다. 안정적으로 수신 받기 원하는 및 올바른
2
내 경우에는 내 오버레이 여전히 가끔 문제를 만들 타이밍 문제가있다는 포커스 만드는 초점을 훔쳐하지 않는 것 같다 편집 할 수 있습니다. 그래도 startService
전화가 허용 된 대답에서 논의 된대로 안전하지 않으므로 BroadcastReceiver
을 사용하여 서비스를 향상시킬 수 있습니다.
토론이나 디버깅 세션에 대한 설명이 아닙니다. 이 대화는 [채팅으로 이동되었습니다] (http://chat.stackoverflow.com/rooms/154466/discussion-on-answer-by-chriscm-accessibilityservice-performglobalaction-not-w). 여기에 중요한 정보가 있으면 질문이나 답변으로 편집해야합니다. –
그래서 위협의 어느 시점에서 나는 그 내용 중 일부를 옮긴 후 주석 삭제에 관한 의견을 게시했습니다. 누군가는 그것을 nuked했지만 지금은 사라졌습니다. 많은 내용을 삭제하기 전에 경고를 보내 주시면 감사하겠습니다. @ prom85 : 다른 질문에 다른 질문을하는 경우이 특정 질문에 대해 정답 (또는 적어도 유사한 문제로 혼동스러워하는 다른 사람들이 볼 필요가있는 정보)이라고 생각합니다. – ChrisCM
삭제 된 댓글 중에 내가 게시 한 내용이 표시되지 않습니다. 어쨌든, 정보는 삭제되지 않았습니다 *; 그것은 채팅에 보관되었습니다. * 다른 시끄러운 댓글을 남겨 두는 것 외에는 경고 할 수있는 실제 방법이 없습니다. 댓글 쓰레드가 너무 길어지면 자동 플래그를 얻습니다. 제안 된 액션 코스는 채팅으로 이동하는 것입니다. 워크 플로를 개선하는 방법이나 정책 관련 문제에 대한 제안 사항이 있으면 [Meta]에 질문을 게시 할 수 있습니다. 당신이 얻으려고하는 라인은 기본적으로 코멘트가 일시적이며 토론을위한 것이 아닙니다. –