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 ...
随机推荐
- nodejs compressor
http://www.2cto.com/kf/201203/122015.html http://www.cnblogs.com/terrylin/archive/2013/06/01/3112596 ...
- 【UVA1633】禁止的回文串(状压DP)
题意: 输入正整数n和k(1<=n<=400,1<=k<=10),求长度为n的01串中有多少个不含长度至少为k的回文连续子串.例如,n=k=3时只有4个串满足条件:001,01 ...
- 14.6.3.2 Configuring Multiple Buffer Pool Instances 配置多个Buffer Poll 实例:
14.6.3.2 Configuring Multiple Buffer Pool Instances 配置多个Buffer Poll 实例: 对于系统有多个buffer pools 在多个字节范围, ...
- char类型关联
SQL> create table a1(id int,name char(10)); Table created. SQL> create table a2(id int,name ch ...
- 【HDOJ】3006 The Number of set
数据量这么小,果断状态压缩+dp. /* 3006 */ #include <iostream> #include <string> #include <map> ...
- poj2151
求每只队伍都回答出题目,且至少有一只队伍回答出n道题的概率存在性问题我们可以转化为任意性问题用P(每支队伍都回答出题目)-P(每只队伍回答的题目数小于n)然后我们可以递推求解 ..,..,..] of ...
- ☀【Zepto】touch events
https://github.com/madrobby/zepto jTouchhttps://github.com/liutian1937/jTouch iphone.ipod Touch.ipad ...
- HDU-2509 Be the Winner
http://acm.hdu.edu.cn/showproblem.php?pid=2509 Be the Winner Time Limit: 2000/1000 MS (Java/Others) ...
- 排序Tip
排序算法 所有排序算法汇总:http://en.wikipedia.org/wiki/Sort_algorithm counting sort 资料 :http://www.cs.miami.ed ...
- 三大跨平台网盘--google driver
背景介绍 Google Drive,美国谷歌公司于2012年4月24日正式推出的一项云存储服务,可以向用户提供5GB的免费存储空间,同时还可以付费扩容. 准备工作 google帐号--帐号注册 软件- ...