1.1.1 從Camera應用程序返回數據

   固然,在捕獲一張照片時,若是Camera程序沒有將圖片返回給調用活動,那麼簡單的使用內置的Camera應用程序捕獲圖像將不具備真正的做用。而爲了使用它真正有用,能夠將活動中的startActivity方法替換成startActivityForResult方法。使用該方法將容許咱們訪問從Camera應用程序中返回的數據,它剛好是用戶以位圖(Bitmap)形式捕獲的圖像。android

   一下是一個基本的示例。編程

 1 package com.bluemobi.nthm.showversion;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.graphics.Bitmap;
 6 import android.os.Bundle;
 7 import android.widget.ImageView;
 8 
 9 public class CameraIntent extends Activity {
10     private  final static int CAMERA_RESULT=0;
11     private  ImageView imv;
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.cameraintentactivity);
16         
17         Intent i=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
18         startActivityForResult(i, CAMERA_RESULT);
19     }
20     @Override
21     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
22         super.onActivityResult(requestCode, resultCode, data);
23         if(resultCode==RESULT_OK){
24             Bundle extras=data.getExtras();
25             Bitmap bmp=(Bitmap) extras.get("data");
26             
27             imv=(ImageView) findViewById(R.id.ReturnedImageView);
28             imv.setImageBitmap(bmp);
29         }
30     }
31       
32 }

   它須要在項目的layout/cameraintentactivity.xml 文件中添加以下的內容:app

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6      
 7     <ImageView 
 8         android:id="@+id/ReturnedImageView"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:contentDescription="@string/about_us"/>
12      
13  </LinearLayout>

    爲了完成上述示例,一下是AndroidManifest.xml文件的內容。ide

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.bluemobi.nthm.showversion"
 4     android:versionCode="1"
 5     android:versionName="1.0" >
 6 
 7     <uses-sdk
 8         android:minSdkVersion="11"   android:targetSdkVersion="20" />
 9 
10    <application
11         android:icon="@drawable/ic_launcher"
12         android:label="@string/app_name">
13         <activity
14             android:name=".CameraIntent"
15             android:label="@string/app_name" >
16             <intent-filter>
17                 <action android:name="android.intent.action.MAIN" />
18                 <category android:name="android.intent.category.LAUNCHER" />
19             </intent-filter>
20         </activity>
21     </application>
22 </manifest>

 

 在此示例中,Camera應用程序在一個經過意圖傳遞的附加值(extra)中返回圖像,而該意圖將在onActivityResult方法中傳遞給主調活動。附加值的名稱「data」,它包含一個Bitmap對象,須要從泛型對象將它強制轉換過來。佈局

1             //從意圖中獲取附加值
2             Bundle extras=data.getExtras();
3             //從附加值中獲取返回的對象
4             Bitmap bmp=(Bitmap) extras.get("data");

   在咱們的佈局XML(layout/cameraintentactivity.xml)文件中,有一個ImageView對象。該ImageView是泛型視圖的擴展,其支持圖像的顯示。因爲咱們有一個帶有指定ReturnedImageView編號(id)的ImageView對象,所以須要在活動中得到它的引用,並經過setImageBitmap方法將它的Bitmap對象設置爲返回的圖像。這將使得應用程序用戶可以查看這幅捕獲的圖像。spa

   爲了得到ImageView對象的引用,使用在Activity類中指定的標準方法findViewById。該方法使得咱們可以以編程的方式引用在佈局XML文件中指定的元素,咱們正在經過將元素id傳遞給setContentView來使用佈局XML文件。上述示例在XML中以如下方式指定ImageView對象:設計

1       <ImageView 
2         android:id="@+id/ReturnedImageView"
3         android:layout_width="wrap_content"
4         android:layout_height="wrap_content"
5         android:contentDescription="@string/about_us"/>

爲了引用ImageView並通知它顯示來自Camera的Bitmap對象,使用如下代碼。code

1         imv=(ImageView) findViewById(R.id.ReturnedImageView);
2         imv.setImageBitmap(bmp);

當運行這個示例時,你可能會注意到結果圖像很小。這不是一個bug——相反這是一個通過精心設計的。當經過一個意圖觸發時,Camera應用程序不會將全尺寸的圖像返回給主調活動。一般,這樣作須要大量的內存,而移動設備通常內存方面受限。相反,Camera應用程序將在返回一幅很小的縮略圖。xml

相關文章
相關標籤/搜索