0

statusbarService.java から通知の展開されたビューを取得し、それを 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 経由で渡す必要があります。したがって、ビューをメンバーとして取り、パーセル可能なクラスのインスタンスを返すパーセルバール クラスを作成する必要があることはわかっています。

  • パーセル経由でビュー インスタンスを記述する方法がわかりません。助言がありますか?バイト配列をいじる何かがあると思います。ビューインスタンスを変換してバイト配列として書き込む方法を知っている人はいますか?

4

2 に答える 2

0

Nikola が言いたかったことは、実際の View インスタンスを渡す代わりに、いつでもその状態を渡すことができるということだったと思います。これの複雑さは、ビューの複雑さに依存します。たとえば、データベース接続がある場合は、その状態も渡す必要があります。同じことが、Parcelable ではない View クラスのすべてのデータ メンバーにも当てはまります。

AIDL インターフェイスの反対側で状態を受け取ったら、yiu は View クラスの新しいインスタンスを簡単に再構築できます。

于 2012-01-24T08:43:36.567 に答える