我写了一个包含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秒。
任何想法。
答案 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)