Учебники

Android — камера

Это следующие два способа, которыми вы можете использовать камеру в своем приложении

  • Использование существующего приложения камеры Android в нашем приложении

  • Непосредственно используя Camera API, предоставляемый Android в нашем приложении

Использование существующего приложения камеры Android в нашем приложении

Непосредственно используя Camera API, предоставляемый Android в нашем приложении

Использование существующего приложения камеры Android в нашем приложении

Вы будете использовать MediaStore.ACTION_IMAGE_CAPTURE для запуска существующего приложения камеры, установленного на вашем телефоне. Его синтаксис приведен ниже

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

Помимо вышесказанного, MediaStore предоставляет и другие доступные Контенты. Они перечислены следующим образом

Sr.No Тип намерения и описание
1

ACTION_IMAGE_CAPTURE_SECURE

Возвращает изображение, снятое с камеры, когда устройство защищено

2

ACTION_VIDEO_CAPTURE

Он вызывает существующее видео приложение в Android для захвата видео

3

EXTRA_SCREEN_ORIENTATION

Используется для установки ориентации экрана на вертикальную или альбомную

4

EXTRA_FULL_SCREEN

Он используется для управления пользовательским интерфейсом ViewImage

5

INTENT_ACTION_VIDEO_CAMERA

Это намерение используется для запуска камеры в режиме видео

6

EXTRA_SIZE_LIMIT

Используется для указания предела размера видео или размера изображения

ACTION_IMAGE_CAPTURE_SECURE

Возвращает изображение, снятое с камеры, когда устройство защищено

ACTION_VIDEO_CAPTURE

Он вызывает существующее видео приложение в Android для захвата видео

EXTRA_SCREEN_ORIENTATION

Используется для установки ориентации экрана на вертикальную или альбомную

EXTRA_FULL_SCREEN

Он используется для управления пользовательским интерфейсом ViewImage

INTENT_ACTION_VIDEO_CAMERA

Это намерение используется для запуска камеры в режиме видео

EXTRA_SIZE_LIMIT

Используется для указания предела размера видео или размера изображения

Теперь вы будете использовать функцию startActivityForResult (), чтобы запустить это действие и дождаться его результата. Его синтаксис приведен ниже

startActivityForResult(intent,0)

Этот метод был определен в классе деятельности . Мы называем это из основной деятельности. Существуют методы, определенные в классе действия, которые выполняют ту же работу, но используются, когда вы не вызываете из действия, а откуда-то еще. Они перечислены ниже

Sr.No Описание функции деятельности
1

startActivityForResult (намерение, намерение, int requestCode, параметры пакета)

Он запускает действие, но может взять с собой дополнительные возможности

2

startActivityFromChild (дочерний вид деятельности, намерение намерения, int requestCode)

Он запускает действие, когда ваша деятельность является дочерней по отношению к любой другой деятельности

3

startActivityFromChild (дочерний вид деятельности, намерение намерения, int requestCode, параметры пакета)

Он работает так же, как и выше, но может принимать дополнительные значения в форме связки с ним

4

startActivityFromFragment (фрагмент фрагмента, намерение намерения, int requestCode)

Запускает активность из фрагмента, в котором вы сейчас находитесь.

5

startActivityFromFragment (фрагмент фрагмента, намерение намерения, int requestCode, параметры пакета)

Он не только запускает действие из фрагмента, но может принимать с ним дополнительные значения

startActivityForResult (намерение, намерение, int requestCode, параметры пакета)

Он запускает действие, но может взять с собой дополнительные возможности

startActivityFromChild (дочерний вид деятельности, намерение намерения, int requestCode)

Он запускает действие, когда ваша деятельность является дочерней по отношению к любой другой деятельности

startActivityFromChild (дочерний вид деятельности, намерение намерения, int requestCode, параметры пакета)

Он работает так же, как и выше, но может принимать дополнительные значения в форме связки с ним

startActivityFromFragment (фрагмент фрагмента, намерение намерения, int requestCode)

Запускает активность из фрагмента, в котором вы сейчас находитесь.

startActivityFromFragment (фрагмент фрагмента, намерение намерения, int requestCode, параметры пакета)

Он не только запускает действие из фрагмента, но может принимать с ним дополнительные значения

Независимо от того, какую функцию вы использовали для запуска действия, все они возвращают результат. Результат можно получить, переопределив функцию onActivityResult .

пример

Вот пример, который показывает, как запустить существующее приложение камеры, чтобы захватить изображение и отобразить результат в виде растрового изображения.

Чтобы поэкспериментировать с этим примером, необходимо запустить его на реальном устройстве, на котором поддерживается камера.

меры Описание
1 Вы будете использовать IDE Android Studio для создания приложения Android и назовите его «Камера» в приложении com.example.sairamkrishna.my.
2 Измените файл src / MainActivity.java, чтобы добавить код намерения для запуска камеры.
3 Изменить макет XML-файла res / layout / activity_main.xml
4 Добавьте разрешение «Камера» и запустите приложение, выберите работающее устройство Android, установите на него приложение и проверьте результаты.

Ниже приводится содержимое измененного основного файла активности 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);
   }
}

Ниже будет содержание файла res / layout / activity_main.xml

<?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>

Ниже будет содержимое файла res / values ​​/ strings.xml для определения новых констант.

<resources>
   <string name="app_name">My Application</string>
</resources>

Ниже приводится содержимое по умолчанию для 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>

Давайте попробуем запустить ваше приложение. Я предполагаю, что вы подключили свое фактическое мобильное устройство Android к компьютеру. Чтобы запустить приложение из Android Studio, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». Eclipse Run Icon значок из панели инструментов. Перед запуском приложения Android Studio отобразит следующее окно, чтобы выбрать опцию, в которой вы хотите запустить приложение Android.

Anroid Camera Tutorial

Выберите мобильное устройство в качестве опции, а затем проверьте свое мобильное устройство, которое откроет камеру и отобразит следующий экран —