android 利用隐式Intent打开图片
实现功能
点击“查看图片”时能够跳出提示,选择系统图库打开还是自己编写的应用打开,并且对于下载好的图片也有效。
1.我将 qiaoba.jpg 放在 res/drawable 目录下,通过按钮设置打开图片,在按钮的监听设置如下:
findViewById(R.id.btn_openImage).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//要是自定义应用打开图片必须添加ACTION_VIEW的Intent
Intent intent = new Intent(Intent.ACTION_VIEW);
//进行图片-->bitmap-->uri转换
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.qiaoba);
//系统提供了现成的API让用户可以将自己喜欢的图片保存到系统相册中.
String uriString = MediaStore.Images.Media.insertImage(getContentResolver(),bitmap,null,null);
System.out.println(uriString);
Uri uri = Uri.parse(uriString);
//设置数据和类型可以用setData( )或setType( ) ,但是同时设置的话是不生效的,
// 只能使用setDataAndType( ) ,image代表图片,星号代表图片中所有格式,
// 可根据自己需要筛选,如只想打开jpg类型图片可用“image/jpg”
intent.setDataAndType(uri,"image/*");
startActivity(intent);
}
});
2.之前发送了打开图片的请求,接下来添加一个显示图片的java文件“ShowImageAty.java”,并添加一个对应的“aty_show_image.xml”文件
public class ShowImageAty extends AppCompatActivity {
ImageView ivQiaoba;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aty_show_image);
ivQiaoba = (ImageView) findViewById(R.id.iv_qiaoba);
Intent getImage = getIntent();
//不为空判断
if (getImage != null) {
//获取intent传递过来的uri数据
Uri data = getImage.getData();
if (data != null) {
ivQiaoba.setImageURI(data);
}
}
}
}
3.在AndroidManifest.xml文件中设置intent-filter标签以及注册网络以及文件读写权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jikexueyuan.notepad.simplepicturebrowser"> <!--访问网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 读写SD卡权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity> <activity
android:name=".ShowImageAty"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<!-- 这个属性用于设定数据的MIME类型,如:image/jpeg或audio/mpeg4-generic。
其子类型可用星号通配符(*)来代替,指示能够跟任何子类型匹配。 -->
<data android:mimeType="image/*" />
</intent-filter>
</activity> </application> </manifest>
另外提一点,如果再android6.0,targetSDKVersion 23 以上运行就要手动注册读写权限了,如果测试版本在 23 以上,会报这样的错
java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=2317, uid=10064 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
手动注册读写权限见:http://blog.csdn.net/dzsw0117/article/details/51212612
android 利用隐式Intent打开图片的更多相关文章
- Android开发学习笔记:浅谈显示Intent和隐式Intent
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/655132 ...
- 安卓开发学习笔记(四):Android Stuidio无法实现隐式Intent是为什么?
一.首先检查我们的代码: FirstActivity.java(主活动程序当中的代码):Button3监听器后面的代码就是我们隐式Intent的业务逻辑所在了,大家可以往下面看看,大概在代码的第57行 ...
- Android开发学习之浅谈显示Intent和隐式Intent
Intent寻找目标组件的两种方式: 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的. 隐式Intent:通过Intent ...
- 【Android】6.0 添加Menu菜单组件、Intent启动活动、显式Intent、隐式Intent
1.0 在helloworld项目基础上创建活动SecondActivity: 2.0 其中main.xml: <?xml version="1.0" encoding=&q ...
- Android开发:显式/隐式Intent
显式跳转 是在已知包名和类名的情况下常用的跳转方法: Intent mIntent = new Intent(); mIntent.setClassName("com.android.set ...
- 在Android中Intent的概念及应用(一)——显示Intent和隐式Intent
Intent寻找目标组件的两种方式: 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的. 隐式Intent:通过Intent ...
- Android开发之隐式Intent中Intent-filter的三个属性-action,category,data
使用隐式Intent时,需要使用到意图过滤器Intent-filter.Intent-filter含有三个属性:action,category,data.通过这三个属性的组合,可以启动想要启动的act ...
- android隐式intent使用场景解析
Android 隐式intent相信大家都有用过,大部分场景我们用显式intent已经能满足我们的业务需求,隐式intent大部分都是用来启动系统自带的Activity或Service之类的组件.昨天 ...
- Android -- 两个activity界面的切换, 显示Intent 和 隐式Intent,putExtra传递数据
1. 两个Activity之间可以通过Intent切换, 包括显示Intent 和 隐式Intent. 实例代码 MainActivity.java public class MainActivity ...
随机推荐
- iOS,OC,图片相似度比较,图片指纹
上周,正在忙,突然有个同学找我帮忙,说有个需求:图片相似度比较. 网上搜了一下,感觉不是很难,就写了下,这里分享给需要的小伙伴. 首先,本次采用的是OpenCV,图片哈希值: 先说一下基本思路: 1. ...
- linux内核学习-
我的博客:www.while0.com 1.端口地址的设置主要有统一编址和独立编址. cat /proc/ioports 可以查询linux主机的设备端口. 2.数据传输控制方式有循环查询,中断和D ...
- HTTP, W3SVC, WAS 和 W3WP
IIS 请求主要模块 当客户端向 IIS 发出 HTTP 请求时,会有很多事情发生. 有许多内核模式和本机模式组件,用于将请求路由到最终响应请求的 W3WP 进程. 响应一个 ...
- BZOJ2083: [Poi2010]Intelligence test
2083: [Poi2010]Intelligence test Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 241 Solved: 96[Sub ...
- inuitcss
inuitcssa powerful, scalable, Sass-based, BEM, OOCSS framework.
- Asp.Net MVC向视图View传值的三种常见的方法:
1.通过View( parameter )的参数传递 action: public ActionResult Index() { Person person=new Person("wumi ...
- Hibernate(十)多对多单向关联映射
上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的 相关内容,这次我们继续多对多单向关联映射. 多对多单向关联映射 在讲解多对多单向关联映 射之前,首 ...
- ssh互信自动化脚本(待更新)
1.建立一个ip,端口,用户,密码列表 [root@localhost shell-key]# cat arg_list.txt 172.16.56.215 172.16.56.215 172.16. ...
- ethtool的基本设置
ethtool是设置网卡属性.IP/TCP相关协议属性的基本工具,功能还是很强大的.ubuntu的版本里没有默认集成,使用apt-get install 安装之.... 使用概要:ethtool et ...
- 【转】SVN linux命令及 windows相关操作(一)
从以下博客转载和整理: http://www.cnblogs.com/richcem/archive/2011/01/08/1930823.html http://blog.wpjam.com/m/t ...