Создание Android приложения Программирование для Android подразумевает решение очень широкого круга задач, и хотя использование камеры - не самая распространенная из них, тем не менее на тематических форумах довольно часто встречаются вопросы, связанные с этой темой. Давайте для примера разработаем простую программу, демонстрирующую использование встроенного в android приложения для работы с камерой для получения снимка. Логика работы нашего приложения будет довольно проста: при нажатии на кнопку у нас будет запускаться стандартная программа для работы с камерой. После того, как мы сделаем снимок и закроем это приложение, результат будет отображаться в ImageView. Ниже приводится код файла манифеста и макета заготовки нашего приложения xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ru.mobilab.sample"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MlCameraSampleActivity"
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> package ru.mobilab.sample;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class MlCameraSampleActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(button_click);
}
public OnClickListener button_click = new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
}
};
} Запускаем приложение для работы с Android камерой В android новые деятельности и службы запускаются с помощью, так называемых интентов (intent). Для запуска стандартного приложения для работы с камерой нужно использовать следующий интент:
android.provider.MediaStore.ACTION_IMAGE_CAPTURE Давайте создадим его внутри метода button_click : Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); Если Вы просто выполните этот код в своей Activity, запустится камера. Сделанный снимок можно получить из данных, которые возвращает интент.
Обычно интенты запускаются с помощью метода startActivity(), однако в случае, когда приложение ждет от интента какого-то результата, необходимо использовать метод startActivityForResult(). Для того, чтобы получить от стандартного приложения камеры снимок, мы должны запустить интент следующим образом: startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); После того как пользователь сделал снимок и завершил Activity камеры, картинка будет доступна через метод onActivityResult(). Вам нужно переопределить этот callback метод внутри своего приложения: protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_PIC_REQUEST) {
// do something
}
}
И снова, CAMERA_PIC_REQUEST - это константа, которую нужно определить в своем приложении и ее значение будет ассоциироваться с результатом, возвращаемым интентом: private static final int CAMERA_PIC_REQUEST = 1112; Вы можете использовать это значение для того чтобы различать различные виды результатов, которые могут возвращаться в результате работы интента.
Получаемое в результате изображение адаптировано для показа на маленьком экране телефона и представлено в виде объекта Bitmap
Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); Для того чтобы показать это изображение в ImageView нужно воспользоваться методом setImageBitmap(). ImageView image = (ImageView) findViewById(R.id.photoResultView);
image.setImageBitmap(thumbnail); В результате всех наших манипуляций наш java проект будет иметь вид: package ru.mobilab.sample;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class MlCameraSampleActivity extends Activity {
/** Called when the activity is first created. */
private static final int CAMERA_PIC_REQUEST = 1112;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(button_click);
}
public OnClickListener button_click = new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
}
};
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_PIC_REQUEST) {
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
ImageView image = (ImageView) findViewById(R.id.imageView1);
image.setImageBitmap(thumbnail);
}
}
} И не забудьте про разрешения. Чтобы приложение заработало нужно добавить в uses-permission значение android.permission.CAMERA. <uses-permission android:name="android.permission.CAMERA"/> Как видите, добавить поддержку камеры в свое приложение очень просто, однако не все пользователи имеют телефоны с камерой. К счастью есть простой способ решения этой проблемы. Нужно просто запретить устанавливать это приложение таким пользователям. Для этого нужно использовать тег <uses-feature> в манефесте Вашего приложения: <uses-feature android:name="android.hardware.camera"></uses-feature> После добавления этой строки Ваше приложение не будет показываться пользователям без камеры в Google Play Market. Тем не менее, <uses-feature> вовсе не запрещает прямую установку приложения на неподходящий телефон - это просто фильтр для Google Play Market.
Источник: Lauren Darcey and Shane Conder "Android SDK Quick Tip: Launching the Camera" Перевод и адаптация: Александр Ледков
|
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.