2011-03-11 30 views
0

私はstatusbarService.javaから通知されたビューを取得し、それをaidlサービス経由で別のアプリケーションに渡そうとしています。aidl経由でビューインスタンスを渡す方法

-frameworks/base/services/java/com/android/server/status/StatusBarService.java 

private void makeStatusBarView(Context context) { 
    Resources res = context.getResources(); 
    mRightIconSlots = res.getStringArray(com.android.internal.R.array.status_bar_icon_order); 
    mRightIcons = new StatusBarIcon[mRightIconSlots.length]; 

    **ExpandedView expanded** = (ExpandedView)View.inflate(context, 
      com.android.internal.R.layout.status_bar_expanded, null); 
} 

私は、この「拡大」ビューインスタンスがサービスを介して保存され、AIDLを介してサービスにバインド誰にそれを渡すことにしたいです。

  • 私はサービスクラスを作成しました。しかし、私はこのビューをサービスインスタンスに渡す方法がわかりません。 サービスにバインドするには、アクティビティまたはサービスのいずれかである必要があります。 StatusBarService.javaは、両方のどちらでもありません。だから私はこのビューのインスタンスをサービスに渡す方法を知らない。

  • 何らかのビューインスタンスがサービスに渡されると仮定すると、ビューインスタンスをaidl経由でバインドするすべての人に渡す必要があります。だから私は、メンバーとしてViewを取り、パーセル可能なクラスインスタンスを返すparcelabaleクラスを書く必要があることを知っています。

  • パーセルを介してビューインスタンスを書き込む方法がわかりません。助言がありますか? バイト配列を使って遊ぶことができます。誰もビューインスタンスを変換し、バイト配列として書き込む方法を知っていますか?

+0

はあなたがちょうどいつものようにビューを設定するビューの設定とあなたの活動にするために必要なデータを返すようにしようとしたことがありますか?したがって、ビューを渡すことは避けてください。私が見る限り、リソースを返すだけでいいのですよね? –

答えて

0

ニコラは、実際のViewインスタンスを渡すのではなく、常に状態を渡すことができたと考えました。この複雑さは、ビューの複雑さに依存します。たとえば、データベース接続がある場合は、その状態も渡す必要があります。同じことは、ParcelableではないViewクラスの任意のデータ・メンバーとすべてのデータ・メンバーに当てはまります。

AIDLインターフェイスのもう一方の端で状態を受け取ると、yiuは単にViewクラスの新しいインスタンスを再構築できます。

0

これは単なるアイデアですが、AIDLインターフェイスを作成してViewインスタンスをラップすることができます。したがって、ビューには以下のパブリックメソッドがあるとします。あなたは私的なものについてはあまりできません。

int getWidth() 
int getHeight() 
String getFoo() 

基本的に同じ方法でインターフェイスを作成します。次に、そのインターフェイスの実装を新たにすることができます。あなたがそうするときには、そのインターフェイスのメソッドを実装する必要があります。それぞれについて、実際のビューで対応するメソッドを呼び出すだけです。だから、あなたは、あなたのサービスまたは他のプロセスまたは任意の建物にAIDLの上にこのインスタンスを渡すことができ、この

new view_interface(){ 
    int getWidth(){ 
     return view.getWidth(); 
    } 
// and so on ... 
}; 

のような...

何か。

ちょうど別のオプション...

関連する問題