根据记忆中eoe的Intent相关视频,模仿,写一个打开图片的Activity

1、在主Activity的button时间中,通过设置action、category、data打开一个图片。这时代码已经可以运行,将使用系统默认的工具打开图片。

Intent intentImage = new Intent(Intent.ACTION_VIEW);
intentImage.addCategory(Intent.CATEGORY_DEFAULT);
File file = new File("/storage/emulated/legacy/Download/xhtml.jpg");
intentImage.setDataAndType(Uri.fromFile(file), "image/*");
startActivity(intentImage);

  

2、自己定义一个Activity,用来展示图片。可以增加一个对应的layout文件,也可以不增加layout文件,直接使用ImageView来呈现图片。需要在Manifest中增加对应的Activity标签。这时再次点击按钮就会出现选择应用程序。

    protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
imageView = new ImageView(this);
setContentView(imageView); Intent imageIntent = getIntent();
imageView.setImageURI(imageIntent.getData());
}
        <activity android:name="ShowImageActivity">
<intent-filter >
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/*" android:scheme="file"/>
</intent-filter>
</activity>

3、经过上面的处理,已经可以选择自己的图片浏览器了。但是在选择使用自己的图片浏览器打开图片的时候,是一片空白,什么都没有,而使用系统默认的工具,则可以正常打开图片。打开LogCat发现以下警告信息“ java.io.FileNotFoundException: /storage/emulated/legacy/Download/xhtml.jpg: open failed: EACCES (Permission denied)”,网上搜索一下即可发现,是因为没有访问该目录的权限,可以参考这个博客android 读取sd卡中的图片。在Manifest文件中增加权限,这次程序可以正常运行了。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

在写这个程序的过程中,发现以下需要注意的地方:

  • 在第1步的代码中,虽然File中对应的目录实际上指向/mnt/shell/emulated/0目录下的内容,但是因为shell目录的权限为drwx------,没有权限访问这个目录,所以只能使用下面的目录访问对应的图片
  • 在第1步的代码中,intentImage.setData(Uri.fromFile(file))这样设置data时,不能打开图片,报错“android.content.ActivityNotFoundException: No Activity found to handle Intent ”,找不到Activity,通过报错可以知道,不设置type的话,系统找不到与其匹配的activity。为了测试,可以在第2步的xml文件中对应的<data>标签,不设置mimeType,只设置scheme。而第1步中的代码也不设置类型,改成intentImage.setData(Uri.fromFile(file))。发现这时就不会报错,会自动调用自己写的这个图片浏览器。
  • intent.setComponent(),设置之后,将精准定位到具体的component。
  • 在Manifest文件中,Activity、Service、Receiver可以通过设置intent-filter标签,在其中加入action、category、data,以后系统通过隐式调用Activity、Service、Receiver时,就可以找到我们定义的Component

4、可以通过activity的setTheme(int)方法设置显示样式。例如,可以不显示标题、以对话框的方式显示窗口。

Android 自己写一个打开图片的Activity的更多相关文章

  1. android 开发 写一个RecyclerView布局的聊天室,并且添加RecyclerView的点击事件

    实现思维顺序: 1.首先我们需要准备2张.9的png图片(一张图片为左边聊天泡泡,一个图片为右边的聊天泡泡),可以使用draw9patch.bat工具制作,任何图片导入到drawable中. 2.需要 ...

  2. android 开发 实现一个带图片Image的ListView

    注意:这种实现方法不是实现ListView的最优方法,只是希望通过练习了解ListView的实现原理 思维路线: 1.创建drawable文件夹将要使用的图片导入进去 2.写一个类,用于存放图片ID数 ...

  3. Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)

    这道题是一道爬虫练习题,需要爬链接http://tieba.baidu.com/p/2166231880里的所有妹子图片,点进链接看一下,这位妹子是日本著名性感女演员--杉本由美,^_^好漂亮啊,赶紧 ...

  4. Android下写一个永远不会被KILL掉的进程/服务

    Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用.当系统觉得当前的资源非常有限的时候,为了保证一些优先级高的程序能运行,就会杀掉一些 ...

  5. 在Android 下写一个检测软件版本号 以自动升级APP 的插件

    直接上图上代码: 1.插件类的编写 工程目录结构图: 代码如下: package org.apache.cordova.versionupdate; import org.apache.cordova ...

  6. Android学习--写一个发送短信的apk,注意布局文件的处理过程!!!

    刚开始写Android程序如图发现使用了findViewById方法之后输出的话居然是null(空指针错误),也就是说这个方法没有成功.网上说这样写是在activity_main .xml去找这个ID ...

  7. 用android去写一个小程序

    前言: 软工的一个小作业:实现"黄金分割小游戏", 需要结对编程,队友:陈乐云    共用时两天. 早期思路设计: 采用键值对的形式,以Map作为存储结构.优点:能够将数据与用户对 ...

  8. android怎样写一个循环文字滚动的TextView

    效果图: 在layout中这样来声明: <com.kaixin001.view.ScrollText android:id="@+id/news_statustxt" and ...

  9. android开发 写一个自定义形状的按键

    步骤: 1.在drawable 文件夹中创建一个xml布局文件. 2.修改布局文件 3.在需要使用背景的按键中导入布局. 创建布局文件: 修改布局文件: <?xml version=" ...

随机推荐

  1. canal数据同步目录

    我们公司对于数据同步有以下需求 1.多个mysql库中有一些基础表需要数据统一,mysql跨库同步 2.mysql热数据加载到redis 3.全文检索需要mysql同步到es 4.数据变更是附属的其它 ...

  2. 织梦提交表单(提交留言)前的js校验

    第一种情况:页面有引入jq的 在form标签上加上id <form action="/plus/diy.php" enctype="multipart/form-d ...

  3. PAT B1034 有理数四则运算 (20 分)

    本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前 ...

  4. mybatis的一对一,一对多查询,延迟加载,缓存介绍

    一对一查询 需求 查询订单信息关联查询用户信息 sql语句 /*通过orders关联查询用户使用user_id一个外键,只能关联查询出一条用户记录就可以使用内连接*/ SELECT orders.*, ...

  5. 2.4《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——小结

    下Table 3本章重要命令小结 命令 描述 示例 > 将输出内容重定向到指定文件中 $ echo foo > foo.txt >> 将输出内容添加到指定问价中 $ echo ...

  6. Android Studio常用快捷键 - 转

    Android Studio常用快捷键 1. Ctrl+D: 集合了复制和粘贴两个操作,如果有选中的部分就复制选中的部分,并在选中部分的后面粘贴出来,如果没有选中的部分,就复制光标所在的行,并在此行的 ...

  7. 20155306 白皎 0day漏洞——漏洞利用原理之栈溢出利用

    20155306 白皎 0day漏洞--漏洞利用原理之栈溢出利用 一.系统栈的工作原理 1.1内存的用途 根据不同的操作系统,一个进程可能被分配到不同的内存区域去执行.但是不管什么样的操作系统.什么样 ...

  8. 4字节emoji表情对应的Unicode编码获取和编码转换

    GitHub Flavored Markdown 今天研究了一天Markdown移动端和pc端统一实现方式,由于以前有搞过移动端富文本编辑器,搞Markdown简单多了: 其中GFM的表情语法不错,比 ...

  9. R绘图 第十篇:绘制文本、注释和主题(ggplot2)

    使用ggplot2包绘制时,为了更直观地向用户显示报表的内容和外观,需要使用geom_text()函数添加文本说明,使用annotate()添加注释,并通过theme()来调整非数据的外观. 一,文本 ...

  10. PowerBI开发 第二篇:数据建模

    在分析数据时,不可能总是对单个数据表进行分析,有时需要把多个数据表导入到PowerBI中,通过多个表中的数据及其关系来执行一些复杂的数据分析任务,因此,为准确计算分析的结果,需要在数据建模中,创建数据 ...