アクセシビリティサービスを使用してアクティビティの変更が検出された場合、クリップボードのテキストを別のアプリケーションのEditTextビューに貼り付けることを実装しています。event.source()はアンドロイドでnullを返します
アクセシビリティサービスでは、アクセシビリティイベントの検出がうまく機能します。 onAccessibilityEventが呼び出されると、event.getSource()というコードはnullオブジェクトを返します。
public class ClipBoardPasteService extends AccessibilityService {
ClipboardManager clipboard;
@Override
public void onCreate() {
super.onCreate();
Log.i("MyTag", "clipboard service created");
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
Log.i("MyTag", "ClipBoardPastedService : onAccessibilityEvent");
clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
AccessibilityNodeInfo source = event.getSource();
Log.i("MyTag", "source name : " + source.getViewIdResourceName());
source.performAction(AccessibilityNodeInfo.ACTION_PASTE);
}
@Override
protected void onServiceConnected() {
super.onServiceConnected();
Log.i("MyTag", "ClipBoardPastedService : onServiceConnected");
String[] packages = {"com.google.android.talk"};
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.flags = AccessibilityServiceInfo.DEFAULT;
info.packageNames = packages;
//AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED
info.eventTypes = AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED;
info.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
setServiceInfo(info);
}
}
、これはこれはaccessibility_service_config.xml
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/service_description"
android:packageNames="@null"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagDefault"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
android:canRetrieveWindowContent="true"
android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity"
/>
私が検索し、見つかった別のstackoverflowのの同様の質問が、答えは「メタが欠落している私のAndroidManifest.xml
<service
android:name=".ClipBoardPasteService"
android:enabled="true"
android:label="@string/app_name"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
<category android:name="android.accessibilityservice.category.FEEDBACK_SPOKEN" />
</intent-filter>
<!-- from ICS -->
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config" />
</service>
の一部です。 「マニフェストのデータ」は意味をなさない。私のコードに何が問題なの?