2012-03-13 4 views
2

AccessibilityServiceというアンドロイドサービスを作成しました。私の活動から、私はそのサービスにバインドしたいと思います。プロセス間通信はありません。そのため、サービスを返すローカルのBinder実装を作成しようとしました(この例ではhttp://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html)。アンドロイドはアクセシビリティサービスにバインドします

onBindAccessibilityServicefinalであり、ローカルバインダを返すことはできません。

これは、サービスにバインドする場合、AIDLを使用する必要があることを意味しますか?

答えて

2

いいえ、サービス期間にバインドできないことを意味します。 AIDLの場合は、onBind()を上書きする必要があります。

+0

ああ、私は参照してください。 AccessibilityServiceにバインドすることはできませんか? –

+0

@JeffStorey:いいえ、最終的に 'onBind()'とマークしています。あなたは 'AccessibilityService'ソースを覗いてみると、内部で自分自身を使用しています。 – CommonsWare

+0

そうですね、私はそれを見て、彼らはその実装を返します。ありがとう。 –

2

onBind()メソッドがfinal宣言されているため、AccessibilityServiceにバインドすることはできません。 しかし、インスタンスを静的フィールドに格納することでインスタンスを使用できます。あなたのMyAccessbilityServiceで

クラス:onServiceConnected方法であなたのAccessibilityService

private static MyAccessibilityService myAccessibilityServiceInstance; 

2.Initializeそれの種類()

@Override 
protected void onServiceConnected() { 
    super.onServiceConnected(); 
    myAccessibilityServiceInstance = this; 
} 

3の

1.Create静的フィールドonUnbind()メソッドでAccessibilityServiceがオフになっているときに消去します。

@Override 
public boolean onUnbind(Intent intent) { 
    myAccessibilityServiceInstance = null; 
    return super.onUnbind(intent); 
} 

あなたのインスタンスの4.Createゲッターをし、我々はそれがあなたの活動に

@Nullable 
public static MyAccessibilityService getInstance(){ 
    return myAccessibilityServiceInstance; 
} 

、最終的に呼び出されますどのサービスのライフサイクルの期間中に知らないので、のは、注釈@Nullableを追加してみましょうかあなたがそれを必要とするところで:

MyAccessibilityService accessibilityService = MyAccessibilityService .getInstance(); 
    if(accessibilityService != null){ 
     //do smth here: 
    } 

私のアプリに実装されて、これまでのところうまく動作します。 彼の返信でalanvに感謝https://stackoverflow.com/a/12557673/5502121

関連する問題