Android 从服务到意图的位图导致接收广播意图的运行时异常
我正在传递一个可绘制的位图,然后将其转换为bytearray并再次返回。但是,这会导致onReceive出现错误。我做错了什么?如何在不损坏接收器的情况下正确传递 此处已满错误:: 服务:Android 从服务到意图的位图导致接收广播意图的运行时异常,android,android-intent,bitmap,bytearray,Android,Android Intent,Bitmap,Bytearray,我正在传递一个可绘制的位图,然后将其转换为bytearray并再次返回。但是,这会导致onReceive出现错误。我做错了什么?如何在不损坏接收器的情况下正确传递 此处已满错误:: 服务: drawable = remotePackageContext.getResources().getDrawable(notification.icon); Bitmap mIcon = convertToBitmap(drawable, drawable.getIntrins
drawable = remotePackageContext.getResources().getDrawable(notification.icon);
Bitmap mIcon = convertToBitmap(drawable, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
mIcon.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
Intent mIntent = new Intent(Constants.ACTION_CATCH_NOTIFICATION);
mIntent.putExtra("text", notification.tickerText.toString());
mIntent.putExtra("icon", b);
MyAccessibilityService.this.getApplicationContext().sendBroadcast(mIntent);
活动错误指出BitmapFactory行是罪魁祸首:
byte[] b = getIntent().getByteArrayExtra("icon");
Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length);
iView.setImageBitmap(bmp);
我终于成功了!大部分功劳归于用户@MartinPelant ref: 我不知道为什么会出现这个错误,但我假设位图或bytearray有问题。我假设位图没有包含正确的位图/可绘制位图。但在我的使用中,我使用AccessibilityService查找传入通知的通知图标。如果你来这里寻找同样的答案,那么就在这里。可以通过在通知中查找第一个ImageView来正确检索:
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
Log.i("onAccessibilityEvent", "");
if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
if (event.getParcelableData() instanceof Notification) {
Notification notification = (Notification) event.getParcelableData();
try {
extractImage(notification.tickerView);
} catch (Exception e) {
e.printStackTrace();
extractImage(notification.contentView);
}
}
}
提取通知的方法可以在引用的链接中找到
我将此作为一个答案发布,因为从AccessibilityService检索文本或包名之外的任何内容都没有合适的解释。如果不这样做,最远的结果就是通过intent传递一个可绘制/位图,这最终会导致上述问题的错误
编辑,以便更清晰,在extractImage方法中使用以下内容将其传递给您的活动:
Bitmap mIcon = convertToBitmap(drawable, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
mIcon.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
Intent mIntent = new Intent(Constants.ACTION_CATCH_NOTIFICATION);
mIntent.putExtra("icon", b);
MyAccessibilityService.this.getApplicationContext().sendBroadcast(mIntent);
请发布整个堆栈跟踪。@Commonware在问题中添加了pastebin。
Bitmap mIcon = convertToBitmap(drawable, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
mIcon.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
Intent mIntent = new Intent(Constants.ACTION_CATCH_NOTIFICATION);
mIntent.putExtra("icon", b);
MyAccessibilityService.this.getApplicationContext().sendBroadcast(mIntent);