Android - Appareil photo

Voici les deux manières suivantes, dans lesquelles vous pouvez utiliser la caméra dans votre application

  • Utilisation de l'application de caméra Android existante dans notre application

  • Utilisation directe de l'API Camera fournie par Android dans notre application

Utilisation de l'application de caméra Android existante dans notre application

Vous utiliserez MediaStore.ACTION_IMAGE_CAPTURE pour lancer une application de caméra existante installée sur votre téléphone. Sa syntaxe est donnée ci-dessous

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

Outre ce qui précède, il existe d'autres intentions disponibles fournies par MediaStore. Ils sont répertoriés comme suit

Sr. Non Type d'intention et description
1

ACTION_IMAGE_CAPTURE_SECURE

Il renvoie l'image capturée à partir de la caméra, lorsque l'appareil est sécurisé

2

ACTION_VIDEO_CAPTURE

Il appelle l'application vidéo existante dans Android pour capturer la vidéo

3

EXTRA_SCREEN_ORIENTATION

Il est utilisé pour définir l'orientation de l'écran sur verticale ou paysage

4

EXTRA_FULL_SCREEN

Il est utilisé pour contrôler l'interface utilisateur de ViewImage

5

INTENT_ACTION_VIDEO_CAMERA

Cette intention est utilisée pour lancer la caméra en mode vidéo

6

EXTRA_SIZE_LIMIT

Il est utilisé pour spécifier la taille limite de la vidéo ou de la taille de capture d'image

Vous allez maintenant utiliser la fonction startActivityForResult () pour lancer cette activité et attendre son résultat. Sa syntaxe est donnée ci-dessous

startActivityForResult(intent,0)

Cette méthode a été définie dans le activityclasse. Nous l'appelons de l'activité principale. Il existe des méthodes définies dans la classe d'activité qui font le même travail, mais utilisées lorsque vous n'appelez pas depuis l'activité mais depuis un autre endroit. Ils sont listés ci-dessous

Sr. Non Description de la fonction d'activité
1

startActivityForResult(Intent intent, int requestCode, Bundle options)

Il démarre une activité, mais peut prendre un ensemble d'options supplémentaire

2

startActivityFromChild(Activity child, Intent intent, int requestCode)

Il lance l'activité lorsque votre activité est enfant de toute autre activité

3

startActivityFromChild(Activity child, Intent intent, int requestCode, Bundle options)

Cela fonctionne de la même manière que ci-dessus, mais cela peut prendre des valeurs supplémentaires sous forme de paquet avec lui

4

startActivityFromFragment(Fragment fragment, Intent intent, int requestCode)

Il lance l'activité à partir du fragment dans lequel vous vous trouvez actuellement

5

startActivityFromFragment(Fragment fragment, Intent intent, int requestCode, Bundle options)

Il lance non seulement l'activité à partir du fragment, mais peut prendre des valeurs supplémentaires avec lui

Quelle que soit la fonction utilisée pour lancer l'activité, elles renvoient toutes le résultat. Le résultat peut être obtenu en remplaçant la fonction onActivityResult .

Exemple

Voici un exemple qui montre comment lancer l'application caméra existante pour capturer une image et afficher le résultat sous forme de bitmap.

Pour expérimenter cet exemple, vous devez l'exécuter sur un appareil réel sur lequel la caméra est prise en charge.

Pas La description
1 Vous utiliserez l'IDE de studio Android pour créer une application Android et la nommerez Camera sous un com.example.sairamkrishna.myapplication.
2 Modifiez le fichier src / MainActivity.java pour ajouter un code d'intention pour lancer la caméra.
3 Modifier le fichier XML de mise en page res / layout / activity_main.xml
4 Ajoutez l'autorisation Appareil photo et exécutez l'application, choisissez un appareil Android en cours d'exécution, installez l'application dessus et vérifiez les résultats.

Voici le contenu du fichier d'activité principal modifié 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);
   }
}

Voici le contenu de 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>

Voici le contenu de res/values/strings.xml pour définir une nouvelle constante

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

Voici le contenu par défaut de 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>

Essayons d'exécuter votre application. Je suppose que vous avez connecté votre appareil mobile Android à votre ordinateur. Pour exécuter l'application depuis Android Studio, ouvrez l'un des fichiers d'activité de votre projet et cliquez sur l' icône Exécuter dans la barre d'outils. Avant de démarrer votre application, Android studio affichera la fenêtre suivante pour sélectionner une option dans laquelle vous souhaitez exécuter votre application Android.

Sélectionnez votre appareil mobile en option, puis vérifiez votre appareil mobile qui ouvrira la caméra et affichera l'écran suivant -