Thứ Ba, 4 tháng 9, 2018

Android - Máy ảnh

Đây là hai cách sau, trong đó bạn có thể sử dụng máy ảnh trong ứng dụng của mình

Sử dụng ứng dụng máy ảnh Android hiện có trong ứng dụng của chúng tôi

Trực tiếp sử dụng API Camera do android cung cấp trong ứng dụng của chúng tôi

Sử dụng ứng dụng máy ảnh Android hiện có trong ứng dụng của chúng tôi

Bạn sẽ sử dụng MediaStore. ACTION_IMAGE_CAPTURE để khởi chạy ứng dụng máy ảnh hiện có được cài đặt trên điện thoại của bạn. Cú pháp của nó được đưa ra dưới đây
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
Ngoài những điều trên, còn có các mục đích có sẵn khác được cung cấp bởi MediaStore. Chúng được liệt kê như sau

Sr.NoLoại và mô tả mục đích
1ACTION_IMAGE_CAPTURE_SECURE

Nó trả về hình ảnh được chụp từ camera, khi thiết bị được bảo mật
2ACTION_VIDEO_CAPTURE

Nó gọi ứng dụng video hiện có trong android để quay video
3EXTRA_SCREEN_ORIENTATION

Nó được sử dụng để đặt hướng của màn hình thành dọc hoặc ngang
4EXTRA_FULL_SCREEN

Nó được sử dụng để kiểm soát giao diện người dùng của ViewImage
5INTENT_ACTION_VIDEO_CAMERA

Mục đích này được sử dụng để khởi chạy máy ảnh ở chế độ video
6EXTRA_SIZE_LIMIT

Nó được sử dụng để chỉ định giới hạn kích thước của kích thước quay video hoặc hình ảnh
Bây giờ bạn sẽ sử dụng hàm startActivityForResult () để khởi chạy hoạt động này và đợi kết quả của nó. Cú pháp của nó được đưa ra dưới đây
startActivityForResult(intent,0)
Phương thức này đã được định nghĩa trong lớp hoạt động . Chúng tôi đang gọi nó từ hoạt động chính.

Có các phương thức được định nghĩa trong lớp hoạt động thực hiện cùng một công việc, nhưng được sử dụng khi bạn không gọi từ hoạt động này nhưng từ một nơi khác.

Chúng được liệt kê dưới đây


Sr.NoMô tả chức năng hoạt động
1startActivityForResult (Intent intent, int requestCode, các tùy chọn Bundle)

Nó bắt đầu một hoạt động, nhưng có thể có thêm các tùy chọn với nó
2startActivityFromChild (Activity child, Intent intent, int requestCode)

Nó khởi động hoạt động khi hoạt động của bạn là con của bất kỳ hoạt động nào khác
3startActivityFromChild (Activity child, Intent intent, int requestCode, các tùy chọn Bundle)

Nó hoạt động giống như trên, nhưng nó có thể có thêm giá trị trong hình dạng của gói với nó
4startActivityFromFragment (Fragment fragment, Intent intent, int requestCode)

Nó khởi chạy hoạt động từ đoạn bạn hiện đang ở trong
5startActivityFromFragment (Fragment fragment, Intent intent, int requestCode, các tùy chọn Bundle)

Nó không chỉ khởi chạy các hoạt động từ đoạn, nhưng có thể có thêm giá trị với nó
Cho dù bạn sử dụng chức năng nào để khởi động hoạt động, tất cả chúng đều trả về kết quả. Kết quả có thể thu được bằng cách ghi đè hàm onActivityResult.

Thí dụ

Dưới đây là một ví dụ cho thấy cách khởi chạy ứng dụng máy ảnh hiện có để chụp ảnh và hiển thị kết quả dưới dạng bitmap.

Để thử nghiệm với ví dụ này, bạn cần chạy trên thiết bị thực tế trên máy ảnh được hỗ trợ.

Các bướcSự miêu tả
1Bạn sẽ sử dụng Android studio IDE để tạo một ứng dụng Android và đặt tên nó là Camera dưới dạng com.example.sairamkrishna.myapplication.
2Sửa đổi tệp src / MainActivity.java để thêm mã ý định để khởi chạy Camera.
3Sửa đổi tệp XML bố trí res / layout / activity_main.xml
4Thêm quyền Camera và chạy ứng dụng và chọn thiết bị Android đang chạy và cài đặt ứng dụng trên đó và xác minh kết quả.
Sau đây là nội dung của tệp hoạt động chính đã sửa đổi 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);
   }
}
Sau đây sẽ là nội dung của tệp 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>
Sau đây sẽ là nội dung của res / values ​​/ strings.xml để xác định một hằng số mới
<resources>
   <string name="app_name">My Application</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.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>
Hãy thử chạy ứng dụng của bạn. Tôi cho rằng bạn đã kết nối thiết bị Android Mobile thực tế với máy tính của mình.

Để chạy ứng dụng từ studio android, mở một trong các tệp hoạt động của dự án của bạn và nhấp vào Chạy biểu tượng từ thanh công cụ.

Trước khi bắt đầu ứng dụng của bạn, Android studio sẽ hiển thị cửa sổ sau để chọn tùy chọn mà bạn muốn chạy ứng dụng lập trình Android của mình.

Học Android 

Chọn thiết bị di động của bạn làm tùy chọn và sau đó kiểm tra thiết bị di động của bạn để mở máy ảnh và hiển thị màn hình sau đây

Học Android

Không có nhận xét nào:

Đăng nhận xét

Lập trình Android - RenderScript

Trong chương này, chúng ta sẽ tìm hiểu về Android RenderScript. Thông thường các ứng dụng trên Android được thiết kế để tiêu thụ tài nguyên ...