实现功能

  点击“查看图片”时能够跳出提示,选择系统图库打开还是自己编写的应用打开,并且对于下载好的图片也有效。

  

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打开图片的更多相关文章

  1. Android开发学习笔记:浅谈显示Intent和隐式Intent

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/655132 ...

  2. 安卓开发学习笔记(四):Android Stuidio无法实现隐式Intent是为什么?

    一.首先检查我们的代码: FirstActivity.java(主活动程序当中的代码):Button3监听器后面的代码就是我们隐式Intent的业务逻辑所在了,大家可以往下面看看,大概在代码的第57行 ...

  3. Android开发学习之浅谈显示Intent和隐式Intent

    Intent寻找目标组件的两种方式: 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的. 隐式Intent:通过Intent ...

  4. 【Android】6.0 添加Menu菜单组件、Intent启动活动、显式Intent、隐式Intent

    1.0 在helloworld项目基础上创建活动SecondActivity: 2.0 其中main.xml: <?xml version="1.0" encoding=&q ...

  5. Android开发:显式/隐式Intent

    显式跳转 是在已知包名和类名的情况下常用的跳转方法: Intent mIntent = new Intent(); mIntent.setClassName("com.android.set ...

  6. 在Android中Intent的概念及应用(一)——显示Intent和隐式Intent

    Intent寻找目标组件的两种方式: 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的. 隐式Intent:通过Intent ...

  7. Android开发之隐式Intent中Intent-filter的三个属性-action,category,data

    使用隐式Intent时,需要使用到意图过滤器Intent-filter.Intent-filter含有三个属性:action,category,data.通过这三个属性的组合,可以启动想要启动的act ...

  8. android隐式intent使用场景解析

    Android 隐式intent相信大家都有用过,大部分场景我们用显式intent已经能满足我们的业务需求,隐式intent大部分都是用来启动系统自带的Activity或Service之类的组件.昨天 ...

  9. Android -- 两个activity界面的切换, 显示Intent 和 隐式Intent,putExtra传递数据

    1. 两个Activity之间可以通过Intent切换, 包括显示Intent 和 隐式Intent. 实例代码 MainActivity.java public class MainActivity ...

随机推荐

  1. vim文本编辑器的总结

    说起文本编辑器,在下就不得不说vim这个老古董了,说老吧,但也是老当益壮,至今还是有不少拥护者.的确,vim很实用,在下就先列出vi的优点吧. 1.如果精通了vim,就可以省去鼠标了. 2.vim是跨 ...

  2. 【zz】C++中struct与class的区别

    转载来源:http://blog.sina.com.cn/s/blog_48f587a80100k630.html C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据 ...

  3. ArtisticStyle----很好用的C/C++样式格式化工具

    下载地址:http://srgb.googlecode.com/files/AStyle_2.02_windows.7z 把astyle.exe 复制到 C:\WINDOWS 目录里,省的指定路径VC ...

  4. LeetCode 面试:Add Two Numbers

    1 题目 You are given two linked lists representing two non-negative numbers. The digits are stored in ...

  5. MYSQL仅仅向某个字段进行插入

    例子: mysql> show create table student \G . row *************************** Table: student Create T ...

  6. 使用VisualStudio进行单元测试之四 顺序测试

    前文中所提到的测试都是针对一个方法进行的独立测试,即使是同事测试多个方法,他们之间也没有影响.但是在实际的生产过程中,更多的情况是方法与方法之间是存在相互的逻辑关系的,所以也就有了今天要介绍的顺序测试 ...

  7. This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery 解决方法

    This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'的意思是,这版本的 MySQL 不支持使 ...

  8. leetcode shttps://oj.leetcode.com/problems/surrounded-regions/

    1.从外围搜索O,深度搜索出现了 Line 35: java.lang.StackOverflowError Last executed input: ["OOOOOOOOOOOOOOOOO ...

  9. 阻止iOS设备锁屏

            [[UIApplicationsharedApplication] setIdleTimerDisabled: YES];

  10. offsetTop offsetLeft offsetWidth offsetHeight

    document // Html 的容器对象. document.documentElement //html 对象 document.body // body 对象 $(document.docum ...