Java tutorial
// Copyright 2016 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.google.codelabs.cosu; import android.Manifest; import android.app.Activity; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; public class MainActivity extends Activity { private Button takePicButton; private Button lockTaskButton; private ImageView imageView; private String mCurrentPhotoPath; private int permissionCheck; public DevicePolicyManager mDevicePolicyManager; private static final int REQUEST_IMAGE_CAPTURE = 1; private static final int PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 2; private static final String FILE_TAG = "File Creation"; public static final String EXTRA_FILEPATH = "com.google.codelabs.cosu.EXTRA_FILEPATH"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Setup button which calls intent to camera app to take a picture takePicButton = (Button) findViewById(R.id.pic_button); takePicButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (intent.resolveActivity(getPackageManager()) != null) { File photoFile = null; try { photoFile = createImageFile(); } catch (IOException e) { Log.e(FILE_TAG, e.getMessage()); } if (photoFile != null) { intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } } else { Toast.makeText(getApplicationContext(), R.string.no_camera_apps, Toast.LENGTH_SHORT).show(); } } }); // Retrieve Device Policy Manager so that we can check whether we can // lock to screen later mDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); lockTaskButton = (Button) findViewById(R.id.start_lock_button); lockTaskButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mDevicePolicyManager.isLockTaskPermitted(getApplicationContext().getPackageName())) { Intent lockIntent = new Intent(getApplicationContext(), LockedActivity.class); lockIntent.putExtra(EXTRA_FILEPATH, mCurrentPhotoPath); startActivity(lockIntent); finish(); } else { Toast.makeText(getApplicationContext(), R.string.not_lock_whitelisted, Toast.LENGTH_SHORT) .show(); } } }); imageView = (ImageView) findViewById(R.id.main_imageView); // Check to see if permission to access external storage is granted, // and request if not permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permissionCheck != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE); } } private File createImageFile() throws IOException { // Check for storage permission if (permissionCheck == PackageManager.PERMISSION_GRANTED) { // Create an image file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); String imageFileName = "JPEG_" + timeStamp + "_"; File storageDir = getApplicationContext().getExternalFilesDir(null); File image = File.createTempFile(imageFileName, /* prefix */ ".jpg", /* suffix */ storageDir /* directory */ ); // Save a file: path for use with ACTION_VIEW intents mCurrentPhotoPath = image.getAbsolutePath(); return image; } return null; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { setImageToView(); } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: { // If request is cancelled, results array is empty if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { permissionCheck = grantResults[0]; } else { takePicButton.setEnabled(false); } return; } } } private void setImageToView() { // Save the file in gallery Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); File f = new File(mCurrentPhotoPath); Uri contentUri = Uri.fromFile(f); mediaScanIntent.setData(contentUri); this.sendBroadcast(mediaScanIntent); // Get the dimensions of the view int targetH = imageView.getMaxHeight(); int targetW = imageView.getMaxWidth(); // Get the dimensions of the bitmap BitmapFactory.Options bmOptions = new BitmapFactory.Options(); bmOptions.inJustDecodeBounds = true; BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); int photoH = bmOptions.outHeight; int photoW = bmOptions.outWidth; // Determine how much to scale down image int scaleFactor = Math.min(photoW / targetW, photoH / targetH); // Decode the image file into a Bitmap sized to fill the View bmOptions.inJustDecodeBounds = false; bmOptions.inSampleSize = scaleFactor; Bitmap imageBitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); imageView.setImageBitmap(imageBitmap); // Enable lock task button lockTaskButton.setEnabled(true); } }