zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    oracle 数据库关闭的的几种方式总结
    oracle热备份
    oracle 的 startup,startup mount,startup nomount之间的区别
    Oracle数据导入导出imp/exp命令总结
    oracle模糊查询效率可这样提高
    流程控制
    常量
    java序列化
    JVM锁说明
    go变量和数据类型
  • 原文地址:https://www.cnblogs.com/prescheng/p/6113124.html
Copyright © 2011-2022 走看看