6

ウィジェットにビットマップを配置しようとすると、これを使用しました:

theBitmap = Bitmap.createBitmap(WW, HH,
            Bitmap.Config.ARGB_8888);
.
.
// draw something using a canvas
.
.
rviews.setImageViewBitmap(R.id.time,theBitmap);

これは私の電話では機能しますが、Galaxy タブレットや Galaxy Note では機能しません。

TheBitmapを新しいARGB_4444にコピーすると、すべてのデバイスで動作します。

Bitmap clone= theBitmap.copy(Bitmap.Config.ARGB_4444, false); // workaround
rviews.setImageViewBitmap(R.id.time, clone);
4

1 に答える 1

8

まず、回避策なしで、logcat の出力を確認します。

ERROR/JavaBinder(20204): !!! FAILED BINDER TRANSACTION !!!

RemoteViews階層に対する変更を保持する IPC トランザクションのファイル サイズ制限に達している可能性があります。

構成を使用してビットマップをコピーするとBitmap.Config.ARGB_4444、各ピクセルは 2 バイトで表されますが、Bitmap.Config.ARGB_8888(2.3 以降のデフォルトの構成) 各ピクセルは 4 バイト[ソース]です。

回避策を使用することで、半分のデータを渡すことになるため、サイズ制限できしみ音を立てます。この投稿では、サイズ制限が 1MB であることを示唆していますが、それが OS のバージョンやメーカーによって異なるかどうかはわかりません。

更新:画像を渡す別の方法は、ビットマップ自体を送信するのではなく、ディスク上のファイルに URI を渡すことです。次に、他のプロセスがファイルへの読み取りアクセス権を持っていることを確認する必要があります (たとえば、ランチャーは別のプロセスで実行されます)。/data/data/my.package.name/ディレクトリにファイルを書き出す場合は、 Context.openFileOutput()でMODE_WORLD_READABLEを指定することでこれを行うことができます。例えば:

remoteViews.setUri(R.id.time, "setImageURI", Uri.fromFile(file));
于 2012-08-31T18:59:16.083 に答える