Skip to content

Most visited

Recently visited

navigation
RuntimePermissionsBasic / src / com.example.android.basicpermissions /

MainActivity.java

1
/*
2
* Copyright 2015 The Android Open Source Project
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
*     http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
16
 
17
package com.example.android.basicpermissions;
18
 
19
import com.example.android.basicpermissions.camera.CameraPreviewActivity;
20
 
21
import android.Manifest;
22
import android.app.Activity;
23
import android.content.Context;
24
import android.content.Intent;
25
import android.content.pm.PackageManager;
26
import android.os.Bundle;
27
import android.support.design.widget.Snackbar;
28
import android.support.v4.app.ActivityCompat;
29
import android.support.v7.app.AppCompatActivity;
30
import android.view.View;
31
import android.widget.Button;
32
 
33
/**
34
 * Launcher Activity that demonstrates the use of runtime permissions for Android M.
35
 * This Activity requests permissions to access the camera
36
 * ({@link android.Manifest.permission#CAMERA})
37
 * when the 'Show Camera Preview' button is clicked to start  {@link CameraPreviewActivity} once
38
 * the permission has been granted.
39
 * <p>
40
 * First, the status of the Camera permission is checked using {@link
41
 * ActivityCompat#checkSelfPermission(Context, String)}
42
 * If it has not been granted ({@link PackageManager#PERMISSION_GRANTED}), it is requested by
43
 * calling
44
 * {@link ActivityCompat#requestPermissions(Activity, String[], int)}. The result of the request is
45
 * returned to the
46
 * {@link android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback}, which starts
47
 * {@link
48
 * CameraPreviewActivity} if the permission has been granted.
49
 * <p>
50
 * Note that there is no need to check the API level, the support library
51
 * already takes care of this. Similar helper methods for permissions are also available in
52
 * ({@link ActivityCompat},
53
 * {@link android.support.v4.content.ContextCompat} and {@link android.support.v4.app.Fragment}).
54
 */
55
public class MainActivity extends AppCompatActivity
56
        implements ActivityCompat.OnRequestPermissionsResultCallback {
57
 
58
    private static final int PERMISSION_REQUEST_CAMERA = 0;
59
 
60
    private View mLayout;
61
 
62
    @Override
63
    protected void onCreate(Bundle savedInstanceState) {
64
        super.onCreate(savedInstanceState);
65
        setContentView(R.layout.activity_main);
66
        mLayout = findViewById(R.id.main_layout);
67
 
68
        // Register a listener for the 'Show Camera Preview' button.
69
        Button b = (Button) findViewById(R.id.button_open_camera);
70
        b.setOnClickListener(new View.OnClickListener() {
71
            @Override
72
            public void onClick(View view) {
73
                showCameraPreview();
74
            }
75
        });
76
    }
77
 
78
    @Override
79
    public void onRequestPermissionsResult(int requestCode, String[] permissions,
80
            int[] grantResults) {
82
        if (requestCode == PERMISSION_REQUEST_CAMERA) {
83
            // Request for camera permission.
84
            if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
85
                // Permission has been granted. Start camera preview Activity.
86
                Snackbar.make(mLayout, "Camera permission was granted. Starting preview.",
87
                        Snackbar.LENGTH_SHORT)
88
                        .show();
89
                startCamera();
90
            } else {
91
                // Permission request was denied.
92
                Snackbar.make(mLayout, "Camera permission request was denied.",
93
                        Snackbar.LENGTH_SHORT)
94
                        .show();
95
            }
96
        }
98
    }
99
 
100
    private void showCameraPreview() {
102
        // Check if the Camera permission has been granted
103
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
104
                == PackageManager.PERMISSION_GRANTED) {
105
            // Permission is already available, start camera preview
106
            Snackbar.make(mLayout,
107
                    "Camera permission is available. Starting preview.",
108
                    Snackbar.LENGTH_SHORT).show();
109
            startCamera();
110
        } else {
111
            // Permission is missing and must be requested.
112
            requestCameraPermission();
113
        }
115
    }
116
 
117
    /**
118
     * Requests the {@link android.Manifest.permission#CAMERA} permission.
119
     * If an additional rationale should be displayed, the user has to launch the request from
120
     * a SnackBar that includes additional information.
121
     */
122
    private void requestCameraPermission() {
123
        // Permission has not been granted and must be requested.
124
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
125
                Manifest.permission.CAMERA)) {
126
            // Provide an additional rationale to the user if the permission was not granted
127
            // and the user would benefit from additional context for the use of the permission.
128
            // Display a SnackBar with a button to request the missing permission.
129
            Snackbar.make(mLayout, "Camera access is required to display the camera preview.",
130
                    Snackbar.LENGTH_INDEFINITE).setAction("OK", new View.OnClickListener() {
131
                @Override
132
                public void onClick(View view) {
133
                    // Request the permission
134
                    ActivityCompat.requestPermissions(MainActivity.this,
135
                            new String[]{Manifest.permission.CAMERA},
136
                            PERMISSION_REQUEST_CAMERA);
137
                }
138
            }).show();
139
 
140
        } else {
141
            Snackbar.make(mLayout,
142
                    "Permission is not available. Requesting camera permission.",
143
                    Snackbar.LENGTH_SHORT).show();
144
            // Request the permission. The result will be received in onRequestPermissionResult().
145
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA},
146
                    PERMISSION_REQUEST_CAMERA);
147
        }
148
    }
149
 
150
    private void startCamera() {
151
        Intent intent = new Intent(this, CameraPreviewActivity.class);
152
        startActivity(intent);
153
    }
154
 
155
}
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.