似乎没有在活动之间发送意图

时间:2015-07-28 09:26:54

标签: android android-intent android-bitmap

我写了一个包含2个活动的应用。一个活动拍了一张照片,第二个活动用了一些过滤器。

活动1:

Intent FilterSelectionIntent = new Intent(getActivity(), PulsFiltersActivity.class);
FilterSelectionIntent.putExtra("PicTaken", currentBitmap);
startActivity(FilterSelectionIntent);

活动2:

    Bundle bd = intent.getExtras();
    mBitmap = bd.getParcelable("PicTaken");

我在Activity 2中放了一些断点,它永远不会停止。我一评论" putExtra"在评论中,我可以达到断点。在我的情况下,活动没有开始,我认为意图是错误的。

我知道一种解决方案是使用Bitmap.compress并在Output流中转发结果。但就我而言,需要花费太多时间。我的Android设备是一个非常基本的设备,它需要2秒来保存bmp。这就是为什么我尝试使用意图来传递参数,但它似乎无效。

我也打开将bmp保存为tmp文件,但我可能会失去2秒。

任何想法。

4 个答案:

答案 0 :(得分:0)

我认为你混淆了几个发送对象的概念。在Activity 1中,您将额外的内容直接添加到意图中。在Activity 2中,您尝试从Bundle取回,而Bitmap没有放入mBitmap = (Bitmap) intent.getParcelableExtra("PicTaken"); 。所以在你的活动2中试试这个:

                    Uri path = Uri.fromFile(file );
                    Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
                    pdfIntent.setDataAndType(path , "application/pdf");
                    pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    try 
                      {
                     startActivity(pdfIntent ); }
                     catch (ActivityNotFoundException e) 
                       {
                          Toast.makeText(EmptyBlindDocumentShow.this,"No
                          Application available to viewPDF",                                                                                                                                                                         
                          Toast.LENGTH_SHORT).show();
                       }  
                   }  

编辑:我发现一些报告显示Bitmaps太大而无法发送,并且在发送Bitmaps时无法启动。 Converting them to ByteArray may help.

答案 1 :(得分:0)

Bitmap实现了Parcelable,因此你总是可以在intent中传递它:

Intent intent = getIntent();
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImg");

并在另一端检索它:

self.check_flights

在此处查看:How can I pass a Bitmap object from one activity to another

答案 2 :(得分:0)

您还可以将位图存储到内部存储中,如下所示:

    final static String IMG_PATH= "bmp2Store"
    FileOutputStream streamOut;
    Bitmap image = currentBitmap;
    try {
            // Store bitmap into internal storage
            streamOut = mContext.openFileOutput(IMG_PATH, Context.MODE_PRIVATE);
            image.compress(Bitmap.CompressFormat.PNG, 100, streamOut);
            streamOut.close();

            // Call ActivityB
            Intent intent= new Intent(this, ConsumirOfertaActivity.class);
            startActivity(intent);
     } catch (FileNotFoundException e) {
            e.printStackTrace();
     } catch (IOException e){
            e.printStackTrace();
     }

在activityB中:

    final static String IMG_PATH= "bmp2Store"
    Bitmap bitmap;
    FileInputStream streamIn;

    try {
        streamIn = openFileInput(IMG_PATH);
        bitmap = BitmapFactory.decodeStream(streamIn);
        streamIn.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

答案 3 :(得分:0)

你不应该在bundle中传递位图:

允许通过Bundle或Intent传递的数据的大小非常小(~1MB)。考虑像Bitmap这样的对象,分配给它的内存很可能大于1MB。对于任何类型的对象,包括字节数组,字符串等,都会发生这种情况。

<强>解决方案: 在启动Activity B之前,将位图存储到File,FileProvider,Singleton(当然是WeakReference)类等,并在Bundle中仅传递URI作为参数。

另请查看此帖子: Intent.putExtras size limit?Maximum length of Intent putExtra method? (Force close)