Có hai cách mà các bạn học lập trình android có thể sử dụng Camera trong ứng dụng:

Sử dụng ứng dụng Android Camera đang tồn tại

Bạn sẽ sử dụng MediaStore.ACTIOn_IMAGE_CAPTURE để chạy một ứng dụng camera đang tồn tại đã được cài đặt trên điện thoại của bạn. Cú pháp là:
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
Ngoài ta, MediaStore còn cung cấp một số Intent khác, được liệt kê dưới đây.
SttIntent type and Miêu tả
ACTION_IMAGE_CAPTURE_SECURE
Trả về hình ảnh được chụp từ camera
ACTION_VIDEO_CAPTURE
Nó gọi ứng dụng video đang tồn tại trong Android để quay video
EXTRA_SCREEN_ORIENTATION
Nó được sử dụng để thiết lập hướng của màn hình là vertical hay landscape
EXTRA_FULL_SCREEN
Nó được sử dụng để điều khiển giao diện UI của ViewImage
INTENT_ACTION_VIDEO_CAMERA
Intent này được sử dụng để chạy camera trong chế độ video
EXTRA_SIZE_LIMIT
Nó được sử dụng để xác định giới hạn kích cỡ của video hoặc hình ảnh được quay/chụp
Bây giờ bạn sẽ sử dụng hàm startActivityForResult() để chạy Activity này và đợi kết quả. Cú pháp là:
startActivityForResult(intent,0)
Phương thức này đã được định nghĩa trong lớp Activity. Chúng ta đang gọi nó từ Main Activity. Lớp Activity này cũng định nghĩa một số phương thức khác mà thực hiện công việc tương tự, nhưng được sử dụng khi bạn không gọi từ Activity đó mà gọi từ nơi khác. Chúng được liệt kê trong bảng dưới:
startActivityForResult(Intent intent, int requestCode, Bundle options)
Bắt đầu một Activity, nhưng có thể nhận các tùy chọn extra với nó
startActivityFromChild(Activity child, Intent intent, int requestCode)
Chạy Activity khi activity của bạn là con của bất cứ Activity nào khác
startActivityFromChild(Activity child, Intent intent, int requestCode, Bundle options)
Nó làm việc như trên, nhưng nó có thể nhận các giá trị extra
startActivityFromFragment(Fragment fragment, Intent intent, int requestCode)
Chạy Activity từ Fragment mà hiện tại bạn đang ở bên trong
startActivityFromFragment(Fragment fragment, Intent intent, int requestCode, Bundle options)
Nó không chỉ chạy Activity từ Fragment mà còn có thể nhận các giá trị exra
Sẽ không có vấn đề gì với hàm nào bạn lựa chọn để sử dụng để chạy Activity, tất cả chúng trả về kết quả. Kết quả có thể được thu nhận bởi ghi đè hàm onActivityResult..

Ví dụ

Dưới đây là một ví dụ minh họa cách chạy ứng dụng camera đang tồn tại để chụp một hình ảnh và hiển thị kết quả trong dạng Bitmap.
Để thử nghiệm ví dụ, bạn cần chạy trên thiết bị thực sự mà hỗ trợ camera.
Sau đây là nội dung của Main Activity file đã được sửa đổi:src/MainActivity.java.
package com.example.sairamkrishna.myapplication;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;

import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;

import android.graphics.Bitmap;
import android.os.BatteryManager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.Set;

public class MainActivity extends ActionBarActivity {
   Button b1,b2;
   ImageView iv;
   
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      b1=(Button)findViewById(R.id.button);
      iv=(ImageView)findViewById(R.id.imageView);
      
      b1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, 0);
         }
      });
   }
   
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      // TODO Auto-generated method stub
      super.onActivityResult(requestCode, resultCode, data);
      
      Bitmap bp = (Bitmap) data.getExtras().get("data");
      iv.setImageBitmap(bp);
   }
   
   @Override
   protected void onDestroy() {
      super.onDestroy();
   }
   
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
   }
   
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      // Handle action bar item clicks here. The action bar will
      // automatically handle clicks on the Home/Up button, so long
      // as you specify a parent activity in AndroidManifest.xml.
      
      int id = item.getItemId();
      
      //noinspection SimplifiableIfStatement
      if (id == R.id.action_settings) {
         return true;
      }
      return super.onOptionsItemSelected(item);
   }
}
Sau đây là nội dung của res/layout/activity_main.xml file
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
   
   <TextView android:text="Camera Example" android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textview"
      android:textSize="35dp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView"
      android:layout_below="@+id/textview"
      android:layout_centerHorizontal="true"
      android:textColor="#ff7aff24"
      android:textSize="35dp" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="camera"
      android:id="@+id/button"
      android:layout_below="@+id/imageView"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="86dp" />
      
</RelativeLayout>
Sau đây là nội dung của res/values/strings.xml to define one new constants
<resources>
   <string name="app_name">My Application</string>
   <string name="hello_world">Hello world!</string>
   <string name="action_settings">Settings</string>
</resources>
Sau đây là nội dung mặc định của AndroidManifest.xml −
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.camera"
   android:versionCode="1"
   android:versionName="1.0" >

   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.sairamkrishna.myapplication.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
     </activity>
     
   </application>
</manifest>
Cuối cùng, bạn chạy ứng dụng Android vừa tạo ở trên.


Chọn thiết bị mobile và sau đó kiểm tra thiết bị sẽ hiển thị màn hình sau: 




0 nhận xét:

Đăng nhận xét

 
Top