2012-02-15 11 views
0

私のアクティビティクラスのDrawingCacheから作成されたビットマップをAIDLサービスに渡そうとしています。しかし、それはサービスに渡されません。私のサービスのstoreImageメソッドでさえ、ログを出力しません。リソースから任意のビットマップ(png)を取り出し、それを自分のアクティビティからAIDLサービスに渡すと、動作します。アクティビティからAIDLサービスにビットマップを渡すことができません

いくつかの制限のため、私はWRITE_EXTERNAL_STORAGE権限をアクティビティクラスに追加できません。そのため、このビットマップをサービスに渡してSdcardに保存しています。一時的に私のアクティビティにこの権限を追加し、アクティビティクラスにのみプロセスを保存すると、イメージが適切に保存されます。しかし、このイメージをリソースフォルダに入れてAIDLサービスに送ると、storeImageメソッドは呼び出されません。

このコードはほとんどのデバイスで動作しますが、動作しないものはほとんどありません。これは、view.getDrawingCache()を使用して作成されたビットマップが間違っていますか?ここで

は、コードブロックです:

view.buildDrawingCache(); 
bitmap = view.getDrawingCache(); 

//This code block sends the bitmap to the service 

if (logProvider != null && logProvider.isServiceRunning()) { 
    logProvider.storeBitmap(bitmap); 
} 

答えて

0

だけネイティブなデータ型で他の場所(そのような活動など)のアプリ内からあなたのサービスに通信することができますので、あなたはメディエータークラスのようなものを使用することができます。静的なHashMapを使用してクラスを作成する場合は、ビットマップと何らかの種類のキー(これが保存されているときのタイムスタンプ、またはBitmapを識別する別の方法)を格納してから、そのキーをService、Serviceキーを使用してビットマップを取得できます。終了したら、ビットマップ参照をクリーンアップしてください。

+0

ビットマップをスケーリングすることはやりました。私はそれがビットマップのサイズだと思う。したがって、私の場合、リモートサービスにビットマップを送信することにはいくつかのサイズ制限があると結論づけることができます。現在、コードはサムスンのタブレットでも動作しています。ここで私はどうしたのですか?bitmap = Bitmap.createScaledBitmap(bitmap、bitmap.getWidth()/ 2、bitmap.getHeight()/ 2、true); – Gaurav

+0

あなたがIPCをやっているなら、いくつかのサイズ制限があります。また、いくぶん遅くなる可能性があり、代わりにpng圧縮画像を転送することをお勧めします。また、IPCのサイズ制限にぶつからないように、常にイメージデータをチャンクで送信することができます。 – harism

+0

@Gryry interesting ...応答してくれてありがとう – Rich

関連する問題