亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android從系統Gallery獲取圖片具體實現

2020-04-11 11:59:00
字體:
來源:轉載
供稿:網友

前言

  在Android應用中,經常有場景會需要使用到設備上存儲的圖片,而直接從路徑中獲取無疑是非常不便利的。所以一般推薦調用系統的Gallery應用,選擇圖片,然后使用它。本篇博客將講解如何在Android中通過系統Gallery獲取圖片。

Gallery應用

  Android原生內置了很多App,而Gallery為圖庫,用于操作設備上的圖片,它會在開機的時候主動掃描設備上存儲的圖片,并可以使用Gallery操作它們。既然要使用Gallery,那么先看看它的AndroidManifest.xml清單文件。

復制代碼 代碼如下:

<activity android:name="com.android.camera.ImageGallery"
                android:label="@string/gallery_label"
                android:configChanges="orientation|keyboardHidden"
                android:icon="@drawable/ic_launcher_gallery">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.dir/image" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.dir/video" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.GET_CONTENT" />
                <category android:name="android.intent.category.OPENABLE" />
                <data android:mimeType="vnd.android.cursor.dir/image" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.GET_CONTENT" />
                <category android:name="android.intent.category.OPENABLE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="image/*" />
                <data android:mimeType="video/*" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.PICK" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="image/*" />
                <data android:mimeType="video/*" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.PICK" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.dir/image" />
            </intent-filter>
        </activity>

  上面是Gallery的AndroidManifest.xml文件中的部分代碼,展示了ImageGallery,從眾多Intent-filter中可以看出,選取圖片應該使用"android.intent.action.PICK",它有兩個miniType,"image/*"是用來獲取圖片的、"video/*"是用來獲取視頻的。Android中眾多Action的字符串其實被封裝在Intent類中,android.intent.action.PICK也不例外,它是Intent.ACTION_PICK。

  既然知道了啟動Gallery的Action,那么再看看ImageGallery.java的源碼,找找其中選中圖片后的返回值。

復制代碼 代碼如下:

private void launchCropperOrFinish(IImage img) {
        Bundle myExtras = getIntent().getExtras();

        long size = MenuHelper.getImageFileSize(img);
        if (size < 0) {
            // Return if the image file is not available.
            return;
        }

        if (size > mVideoSizeLimit) {
            DialogInterface.OnClickListener buttonListener =
                    new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            };
            new AlertDialog.Builder(this)
                    .setIcon(android.R.drawable.ic_dialog_info)
                    .setTitle(R.string.file_info_title)
                    .setMessage(R.string.video_exceed_mms_limit)
                    .setNeutralButton(R.string.details_ok, buttonListener)
                    .show();
            return;
        }

        String cropValue = myExtras != null ? myExtras.getString("crop") : null;
        if (cropValue != null) {
            Bundle newExtras = new Bundle();
            if (cropValue.equals("circle")) {
                newExtras.putString("circleCrop", "true");
            }

            Intent cropIntent = new Intent();
            cropIntent.setData(img.fullSizeImageUri());
            cropIntent.setClass(this, CropImage.class);
            cropIntent.putExtras(newExtras);

            /* pass through any extras that were passed in */
            cropIntent.putExtras(myExtras);
            startActivityForResult(cropIntent, CROP_MSG);
        } else {
            Intent result = new Intent(null, img.fullSizeImageUri());
            if (myExtras != null && myExtras.getBoolean("return-data")) {
                // The size of a transaction should be below 100K.
                Bitmap bitmap = img.fullSizeBitmap(
                        IImage.UNCONSTRAINED, 100 * 1024);
                if (bitmap != null) {
                    result.putExtra("data", bitmap);
                }
            }
            setResult(RESULT_OK, result);
            finish();
        }
    }

以上的ImageGallery.java的部分源碼,從setResult()方法可以看出,它返回的Intent包含了選中圖片的Uri,它是一個content://開頭的內容提供者,并且如果傳遞過去的Intent的Extra中,包含一個name為"return-data"并且值為true的時候,還會往Extra中寫入name為"data"的圖片縮略圖。

Gallery獲取圖片Demo

  既然已經知道了啟動Gallery的Action,和它如何返回選中的數據,那么接下來通過一個簡單的Demo來演示一下如何從系統Gallery中獲取圖片,并把獲取到的圖片展示到界面的一個ImageView中。

復制代碼 代碼如下:

package cn.bgxt.sysgallerydemo;

import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.app.Activity;
import android.content.Intent;

public class MainActivity extends Activity {
    private Button btn_getImage;
    private ImageView iv_image;
    private final static String TAG = "main";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn_getImage = (Button) findViewById(R.id.btn_getImage);
        iv_image = (ImageView) findViewById(R.id.iv_image);

        btn_getImage.setOnClickListener(getImage);
    }

    private View.OnClickListener getImage = new OnClickListener() {

        @Override
        public void onClick(View v) {
            // 設定action和miniType
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_PICK);
            intent.setType("image/*");
            // 以需要返回值的模式開啟一個Activity
            startActivityForResult(intent, 0);
        }
    };

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // 如果獲取成功,resultCode為-1
        Log.i(TAG, "resultCode:" + resultCode);
        if (requestCode == 0 && resultCode == -1) {
            // 獲取原圖的Uri,它是一個內容提供者
            Uri uri = data.getData();
            iv_image.setImageURI(uri);
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
}

  效果展示:

總結

  本篇博客到這里就基本上講解了如何在Android下調用系統Gallery獲取圖片,其實功能實現很簡單,主要是要注意Action和miniType不要寫錯了,并且返回值是一個Uri。雖然現在越來越多需要用到圖片的商業應用,都在自己開發獲取設備圖片的功能,但是使用系統自帶的Gallery來獲取不失為一種快速實現功能的解決辦法。為了方便起見,系統的Gallery源碼,也會一并打包放到源碼中,有需要的可以下載來看看。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩资源在线观看| 国产97人人超碰caoprom| xxxx欧美18另类的高清| 国产精品h片在线播放| 欧美性色xo影院| 91在线观看欧美日韩| 青青a在线精品免费观看| 亚洲伊人一本大道中文字幕| 日韩在线免费视频观看| 色吧影院999| 久久久久久噜噜噜久久久精品| 欧美成人免费一级人片100| 欧洲日本亚洲国产区| 成人av电影天堂| 亚洲最大福利视频网| 日韩一区二区三区国产| 久久综合九色九九| 成人av资源在线播放| 欧美日韩国产精品一区二区不卡中文| 欧美黄色三级网站| 日韩h在线观看| 国产精品视频久久久久| 日韩av在线一区二区| 国产亚洲美女精品久久久| 韩国v欧美v日本v亚洲| 日韩欧美国产成人| 国产一区视频在线| 亚洲一区二区三区成人在线视频精品| 九九久久国产精品| 日韩福利视频在线观看| 91超碰caoporn97人人| 日韩电影中文字幕在线| 国产精品91久久久久久| 韩国一区二区电影| 亚洲国产另类 国产精品国产免费| 日韩欧美国产高清91| 国内揄拍国内精品| 午夜精品三级视频福利| 国产欧美va欧美va香蕉在线| 国产精品日韩欧美大师| 中文字幕日韩免费视频| 91亚洲va在线va天堂va国| 久久久久国色av免费观看性色| 视频一区视频二区国产精品| 97人人做人人爱| 国产精品久久久久999| 欧美激情综合色综合啪啪五月| 亚洲欧美精品中文字幕在线| 午夜精品久久久久久久99热| 亚洲黄一区二区| 欧美成人午夜剧场免费观看| 国产精品久久久久91| 国产亚洲人成网站在线观看| 精品久久久久久久久久久久| 最近2019免费中文字幕视频三| 日韩av在线免播放器| 中文字幕日韩av电影| 亚洲理论在线a中文字幕| 国产精自产拍久久久久久| 亚洲片国产一区一级在线观看| 97成人精品视频在线观看| 一区二区欧美久久| 国产精品成人v| 欧美第一页在线| 欧美成人高清视频| 欧美国产日韩一区二区三区| 欧美午夜性色大片在线观看| 欧美老少做受xxxx高潮| 欧美劲爆第一页| 9.1国产丝袜在线观看| 亚洲有声小说3d| 亚洲欧美另类国产| 一区二区三区天堂av| 欧美色播在线播放| 911国产网站尤物在线观看| 欧美激情综合色综合啪啪五月| 一本色道久久88综合日韩精品| 最新国产精品亚洲| 欧美在线视频导航| 日韩高清免费在线| 欧美亚洲成人网| 国产成人拍精品视频午夜网站| 国产欧美久久一区二区| 精品中文字幕在线| 日韩欧美中文免费| 精品成人国产在线观看男人呻吟| www.午夜精品| 日韩高清免费观看| 午夜精品理论片| 日韩在线精品一区| 国产亚洲视频在线观看| 91精品国产91久久久久久最新| 日日摸夜夜添一区| 性欧美视频videos6一9| 亚洲欧洲高清在线| 亚洲乱码一区av黑人高潮| 色在人av网站天堂精品| 亚洲精品成人av| 精品久久香蕉国产线看观看亚洲| 日韩国产欧美精品在线| 欧美裸体视频网站| 97在线观看视频| 九色精品美女在线| 亚洲黄页视频免费观看| 日韩高清欧美高清| 国产91精品高潮白浆喷水| 日产精品99久久久久久| 久久99久国产精品黄毛片入口| 91久久在线视频| 中文字幕综合一区| 成人字幕网zmw| 欧美日韩国产成人在线| 中文字幕日本欧美| 久久久精品视频成人| 国产区亚洲区欧美区| 91av在线看| 欧美裸体男粗大视频在线观看| 亚洲视频axxx| www欧美xxxx| 91香蕉电影院| 国产精品女视频| 色噜噜国产精品视频一区二区| 日韩在线小视频| 丝袜亚洲另类欧美重口| 亚洲免费伊人电影在线观看av| 韩国一区二区电影| 久久精品亚洲热| 成人精品视频99在线观看免费| 尤物tv国产一区| 亚洲经典中文字幕| 欧美影院成年免费版| 国产亚洲欧美日韩一区二区| 国产精品视频公开费视频| 精品视频在线导航| 2019中文在线观看| 国产成人精品日本亚洲专区61| 国产亚洲精品久久久久久牛牛| 欧美性在线视频| 日韩免费黄色av| 国产欧美精品日韩精品| 97超级碰碰人国产在线观看| 精品二区三区线观看| 亚洲另类激情图| 久久国产精品99国产精| 欧美成人一区在线| 日韩成人激情影院| 亚洲激情 国产| 亚洲美腿欧美激情另类| 日韩免费黄色av| 精品视频在线播放色网色视频| 久久久噜久噜久久综合| 欧美国产亚洲视频| 日韩不卡在线观看| 国产亚洲xxx| 欧美日韩xxx| 国内精品久久久久久| 另类图片亚洲另类| 国产精品手机播放| 深夜福利亚洲导航| 伊人成人开心激情综合网| 欧美性受xxxx白人性爽| 超碰精品一区二区三区乱码| 亚洲欧洲成视频免费观看| 97超碰国产精品女人人人爽|