萬盛學電腦網

 萬盛學電腦網 >> 手機應用 >> 安卓教程 >> Android從系統Gallery獲取圖片具體實現

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

      這篇文章主要介紹了Android從系統Gallery獲取圖片具體實現,有需要的朋友可以參考一下

       前言     在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);
copyright © 萬盛學電腦網 all rights reserved