Android 从服务到意图的位图导致接收广播意图的运行时异常

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

我正在传递一个可绘制的位图,然后将其转换为bytearray并再次返回。但是,这会导致onReceive出现错误。我做错了什么?如何在不损坏接收器的情况下正确传递

此处已满错误::

服务:

        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);