根据记忆中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. OpenCV——图像修补

  2. javascript瀑布流效果

    javascript瀑布流效果 其实javascript瀑布流 前几年都已经很流行了(特别是美丽说,蘑菇街),最近看到网上有人问这个瀑布流效果,所以自己有空的时候就研究了下,其实也是研究别人的代码,研 ...

  3. 树莓派学习笔记(2):常用linux命令

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyi 1.ls命令:列出文件目录的常用命令,主要参数见下表. -a 列出目录下的所有文件,包括以.开头的隐含文件. -b ...

  4. 【H5】滚动事件(jq)

    $(function(){ console.log($('html,body').scrollTop());  //记录滚动高度(滚动前) }) $('html,body').scroll(funct ...

  5. THUSC 2017 D1T2 杜老师

    这是个非常有趣的数学题啦... 其实大概推一推式子就能得到一个信息,就是答案一定是$2$的整数次幂,并且其实答案就是$2^{R-L+1-sum}$,其中$sum$表示有多少个数不能用$L-i-1$的数 ...

  6. 2017-2018 Exp1 PC平台逆向破解 20155214

    目录 Exp1 PC平台逆向破解 实验内容 知识点 官方源 中科大源 上海交大的源 新加坡源 debain源 debian安全更新源 163源的地址 阿里云kali源 启发 评论 Exp1 PC平台逆 ...

  7. 20155234 Exp2 后门原理与实践

    Windows获得Linux Shell 1.查看ip 2.监听端口 3.实验成功如下图 Linux获得Win Shell 1.查看虚拟机ip 2.监听端口 3.实验成功如下图 使用NC传输数据 1. ...

  8. Exp7

    实验内容 简单应用SET工具建立冒名网站 kali IP: 192.168.1.160 (原198) win7 IP: 192.168.1.199 1.开启本机Apache服务 (1)查看80端口是否 ...

  9. mfc Radio Buttons

    添加单选按钮 关联变量 调试宏TRACE BOOL类型 一.添加一组单选按钮 二.添加第二组单选按钮 三.关联变量 四.单选按钮运用 void CMY_Dialog::OnBnClickedButto ...

  10. CS50.1

    1,GUI,graphical user interface,图形用户界面 2.VB,visual basic,微软开发的一种程序语言 3,BIT,binary digit 比特 4,byte 5,8 ...