2012-02-15 59 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和某种类型的密钥(可能是存储时的时间戳或区分位图的其他方式),然后将密钥传递给服务,服务然后可以使用该键检索位图。确保在完成和失败时清理位图参考。

+0

缩放位图的技巧。我认为这是位图的大小。因此,对于我的情况,我可以得出结论,发送一个位图到远程服务有一定的大小限制。现在代码也在三星平板电脑上工作。这是我做的:bitmap = Bitmap.createScaledBitmap(bitmap,bitmap.getWidth()/ 2,bitmap.getHeight()/ 2,true); – Gaurav 2012-02-15 19:59:02

+0

如果你在做IPC,确实有一些尺寸限制。此外,它可能有点慢,它可能是一个好主意,而不是传输,例如,PNG压缩图像。为确保不会达到IPC大小限制,您可以始终以大块的形式发送图像数据。 – harism 2012-02-15 21:38:12

+0

@Garry有趣......感谢您的回复 – Rich 2012-02-15 23:49:36