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.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.