Android - Kamera
Bunlar, uygulamanızda kamerayı kullanabileceğiniz aşağıdaki iki yoldur
Uygulamamızda mevcut android kamera uygulamasını kullanmak
Doğrudan uygulamamızda android tarafından sağlanan Camera API kullanarak
Uygulamamızda mevcut android kamera uygulamasını kullanmak
Telefonunuzda kurulu mevcut bir kamera uygulamasını başlatmak için MediaStore.ACTION_IMAGE_CAPTURE kullanacaksınız. Söz dizimi aşağıda verilmiştir.
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
Yukarıdakilerin dışında, MediaStore tarafından sağlanan başka kullanılabilir Amaçlar da vardır. Aşağıdaki gibi listelenirler
Sr.No | Amaç türü ve açıklaması |
---|---|
1 | ACTION_IMAGE_CAPTURE_SECURE Cihaz sabitlendiğinde kameradan yakalanan görüntüyü döndürür. |
2 | ACTION_VIDEO_CAPTURE Video çekmek için androiddeki mevcut video uygulamasını çağırır |
3 | EXTRA_SCREEN_ORIENTATION Ekranın yönünü dikey veya yatay olarak ayarlamak için kullanılır. |
4 | EXTRA_FULL_SCREEN ViewImage'ın kullanıcı arayüzünü kontrol etmek için kullanılır. |
5 | INTENT_ACTION_VIDEO_CAMERA Bu amaç, kamerayı video modunda başlatmak için kullanılır |
6 | EXTRA_SIZE_LIMIT Video veya görüntü yakalama boyutunun boyut sınırını belirtmek için kullanılır |
Şimdi bu etkinliği başlatmak ve sonucunu beklemek için startActivityForResult () işlevini kullanacaksınız . Söz dizimi aşağıda verilmiştir.
startActivityForResult(intent,0)
Bu yöntem, activitysınıf. Onu ana faaliyetten çağırıyoruz. Aktivite sınıfında aynı işi yapan ancak aktiviteden değil başka bir yerden çağırdığınızda kullanılan yöntemler vardır. Aşağıda listelenmiştir
Sr.No | Etkinlik işlevi açıklaması |
---|---|
1 | startActivityForResult(Intent intent, int requestCode, Bundle options) Bir aktivite başlatır, ancak beraberinde fazladan seçenek paketi alabilir |
2 | startActivityFromChild(Activity child, Intent intent, int requestCode) Aktiviteniz başka herhangi bir aktivitenin çocuğu olduğunda aktiviteyi başlatır |
3 | startActivityFromChild(Activity child, Intent intent, int requestCode, Bundle options) Yukarıdaki ile aynı şekilde çalışır, ancak bununla birlikte paket şeklinde ekstra değerler alabilir. |
4 | startActivityFromFragment(Fragment fragment, Intent intent, int requestCode) Şu anda içinde bulunduğunuz parçadan etkinlik başlatır |
5 | startActivityFromFragment(Fragment fragment, Intent intent, int requestCode, Bundle options) Etkinliği sadece parçadan başlatmakla kalmaz, onunla ekstra değerler alabilir |
Aktiviteyi başlatmak için hangi işlevi kullanırsanız kullanın, hepsi sonucu döndürür. Sonuç, onActivityResult işlevini geçersiz kılarak elde edilebilir .
Misal
Bir görüntüyü yakalamak ve sonucu bitmap biçiminde görüntülemek için mevcut kamera uygulamasının nasıl başlatılacağını gösteren bir örnek aşağıda verilmiştir.
Bu örneği denemek için, bunu kameranın desteklendiği gerçek bir cihazda çalıştırmanız gerekir.
Adımlar | Açıklama |
---|---|
1 | Bir Android uygulaması oluşturmak için Android studio IDE'yi kullanacak ve bunu com.example.sairamkrishna.myapplication altında Camera olarak adlandıracaksınız. |
2 | Kamerayı başlatmak üzere amaç kodu eklemek için src / MainActivity.java dosyasını değiştirin. |
3 | Düzen XML dosyasını res / layout / activity_main.xml değiştir |
4 | Kamera iznini ekleyin ve uygulamayı çalıştırın ve çalışan bir android cihazı seçin ve üzerine uygulamayı yükleyin ve sonuçları doğrulayın. |
Aşağıda, değiştirilen ana etkinlik dosyasının içeriği yer almaktadır src/MainActivity.java.
package com.example.sairamkrishna.myapplication;
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
public class MainActivity extends AppCompatActivity {
public static final int MY_PERMISSIONS_REQUEST_CAMERA = 100;
public static final String ALLOW_KEY = "ALLOWED";
public static final String CAMERA_PREF = "camera_pref";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
if (getFromPref(this, ALLOW_KEY)) {
showSettingsAlert();
} else if (ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.CAMERA)) {
showAlert();
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA},
MY_PERMISSIONS_REQUEST_CAMERA);
}
}
} else {
openCamera();
}
}
public static void saveToPreferences(Context context, String key, Boolean allowed) {
SharedPreferences myPrefs = context.getSharedPreferences(CAMERA_PREF,
Context.MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = myPrefs.edit();
prefsEditor.putBoolean(key, allowed);
prefsEditor.commit();
}
public static Boolean getFromPref(Context context, String key) {
SharedPreferences myPrefs = context.getSharedPreferences(CAMERA_PREF,
Context.MODE_PRIVATE);
return (myPrefs.getBoolean(key, false));
}
private void showAlert() {
AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
alertDialog.setTitle("Alert");
alertDialog.setMessage("App needs to access the Camera.");
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "DONT ALLOW",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
});
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "ALLOW",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.CAMERA},
MY_PERMISSIONS_REQUEST_CAMERA);
}
});
alertDialog.show();
}
private void showSettingsAlert() {
AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
alertDialog.setTitle("Alert");
alertDialog.setMessage("App needs to access the Camera.");
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "DONT ALLOW",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
//finish();
}
});
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "SETTINGS",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
startInstalledAppDetailsActivity(MainActivity.this);
}
});
alertDialog.show();
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_CAMERA: {
for (int i = 0, len = permissions.length; i < len; i++) {
String permission = permissions[i];
if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
boolean
showRationale =
ActivityCompat.shouldShowRequestPermissionRationale(
this, permission);
if (showRationale) {
showAlert();
} else if (!showRationale) {
// user denied flagging NEVER ASK AGAIN
// you can either enable some fall back,
// disable features of your app
// or open another dialog explaining
// again the permission and directing to
// the app setting
saveToPreferences(MainActivity.this, ALLOW_KEY, true);
}
}
}
}
// other 'case' lines to check for other
// permissions this app might request
}
}
@Override
protected void onResume() {
super.onResume();
}
public static void startInstalledAppDetailsActivity(final Activity context) {
if (context == null) {
return;
}
final Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + context.getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(i);
}
private void openCamera() {
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivity(intent);
}
}
Aşağıdakilerin içeriği olacak res/layout/activity_main.xml file-
<?xml version="1.0" encoding="utf-8"?>
<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">
</RelativeLayout>
Aşağıdakilerin içeriği olacak res/values/strings.xml bir yeni sabit tanımlamak için
<resources>
<string name="app_name">My Application</string>
</resources>
Aşağıdaki varsayılan içeriktir AndroidManifest.xml -
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sairamkrishna.myapplication" >
<uses-permission android:name="android.permission.CAMERA" />
<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>
Uygulamanızı çalıştırmayı deneyelim. Gerçek Android Mobil cihazınızı bilgisayarınıza bağladığınızı varsayıyorum. Uygulamayı android stüdyosundan çalıştırmak için, projenizin etkinlik dosyalarından birini açın
Mobil cihazınızı bir seçenek olarak seçin ve ardından kamerayı açacak ve aşağıdaki ekranı görüntüleyecek olan mobil cihazınızı kontrol edin -