关于andorid Intent组件的一些问题的解释

</pre>Intent意图的意思,在andorid 当中常用于组件的跳转,当然,这是最主要的,其他的呢?比如,我们如何获取系统的音乐,图片,文字,或者其他的文件呢?<p></p><p>这篇文章主要和大家说下Intent如何获取系统的音乐,照片或者其他的文件:</p><p>大家知道Intent的有个setaction方法吧?这个方法可以传入参数是吧?这个方法是什么意思呢?其实就是你的Inten一什么形式去开展,还有一个方法是setType,这个方法是设置类型,下面附上如何去获取系统文件的方法:</p><p>  </p><pre name="code" class="html">                                 Intent file_choose_intent=new Intent();
			    	 file_choose_intent.setAction(Intent.ACTION_GET_CONTENT);
			    	 file_choose_intent.setType("image/*");
			    	 startActivityForResult(file_choose_intent,1);
这方法用了image/*去过滤,如果你想获取音频呢?audio/*,如果你要选很多文件呢,直接*/*;全选文件

intent返回的是系统中的一个张图片的Uri,(Uri的概念我就不细说了),你可以将这个Uri作为个一个资源定位符号,获取得到这个文件的在手机上文件路径,然后可以生成一个文件的流啦(所以想要获得某种文件的路径,就用这个方法啦),下面给出获取一张照片的示例:

                                        this.image_camera.setImageURI(data.getData());
					  String[] proj = { MediaStore.Images.Media.DATA };
					  Cursor actualimagecursor =this.cr.query(data.getData(),proj,null,null,null);
					   
					  int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
					   
					  actualimagecursor.moveToFirst();
					   
					  String img_path = actualimagecursor.getString(actual_image_column_index);
					  Toast.makeText(getApplicationContext(), img_path, 1000).show();
					  File file = new File(img_path);

这个方法还是简单吧。

Intent的其他系统用法:

1.打开摄像头:

                           Intent i = new Intent(  
                           MediaStore.ACTION_IMAGE_CAPTURE);
	    		   startActivityForResult(i,2);
2.拨打电话:

Uri callUri=Uri.parse("tel:1008611");
new Intent(Intent.ACTION_CALL,uri)

如果还有其他需要的话:

这两个链接应该可以满足你:http://blog.csdn.net/chaod5659/article/details/16844907

http://zheyiw.iteye.com/blog/1782665


接下来我们说下Intent的在activity中的跳转问题:

1.Intent可以作为跳转的目的性,只要用了

Intent.selcass();就好了

2.关于Intent传递数据的问题:

传递简单数据:比如Int,double,float这种,都很简单,要么直接用Intent去封装,要直接用bundle去封装也可以。

传递对象数据:1.如果我们需要传递一个对象呢?andorid的Bundle提供了一个putSerializable();方法,传入的对象必须是实现了java的序列化的对象,

什么是java对象序列化呢?j简单的说:就是把一个heap空间中的对象,变成文本形式的二进制流一样,然后用流的方法去传递这个对象,所以,我们在这里能理解到,Intent传递对象的时候,不是传递对象的引用(address),而是传递了整个对象过去.所以,在开发的时候,你一定要注意,你传递对象的大小问题,这个程序性能很挂钩的哈!


最后说下我最近在项目中碰见个一个问题:如何让一张图片在actvitiy中跳转呢?

1.我看到网上有些方法的是说,把bitmap对象传递,我想说,这种方式我试过了,要出错的,原因的话,我想,就是序列化的问题吧,bitmap这种吃内存的小胖子,android是不允许在activity中传递的。

2于是,我想到了把bitmap变成一个Byte数组,然后在对象上传递,好吧,这样是可以了,但是,可能是手机低端吧,直接卡到不能动了,想想也是,把bitmap变成byte数组,然后在序列化,在传递,这样的方法是极大的耗费性能的。也不行。

之后我想到了两种解决办法:

1.设置一快静态变量,然后共享这个静态变量。

这种方式其实不好,因为我们知道,静态变量一旦定义,将一直存在于整个系统运行的整个过程,java垃圾回收机制,永远不会回收它占用的内存,定义过多必然造成大量占用java虚拟机的内存,影响系统的数据处理过程,甚者造成内存溢出。尤其是bitmap这种静态变量,最好不要这样用。其次,如果你的程序写的不好,静态变量被多处修改使用,是很危险的。多的时候你的BUG都会难调无比。

2.这种方式我比较推荐的,虽然速度不如上一种方法:

对图片做缓存,写到手机的磁盘(SD卡)上,作为缓存,然后直接传递一个图片的路径的string给actvitiy,再去写入这个图片的bitmap,这种方法虽然没有上一种那么高效,但是,确实我认为比较好的方法了:

首先,这个图片的bitmap的是开放在heap中的,你可以实行回收机制,第二是,避免了static变量的使用。

其实,这种方式也不慢,写一个文件而已,真心快。(其实就是以时间换空间);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值