Marshmallow'da depolama izni hatası


159

Lollipop'ta indirme işlevi uygulamamda iyi çalışıyor, ancak Marshmallow'a yükselttiğimde, uygulamam çöküyor ve internetten SD karta indirmeye çalıştığımda bu hatayı veriyor:

Neither user  nor current process has android.permission.WRITE_EXTERNAL_STORAGE

Bu kod satırından şikayet ediyor:

DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);

Ben manifest dış uygulama izinleri var:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

Projeyi temizledim ve yeniden inşa ettim, ancak yine de çöküyor.


Bunu deneyin size yardımcı olabilir: - stackoverflow.com/a/41221852/5488468
Bipin Bharti

Çalışma zamanı izinlerini kolayca işlemeye yardımcı olacak bir kütüphane hazırladım. Github.com/nabinbhandari/Android- Ödemeler
Nabin Bhandari

Yanıtlar:


357

Kullanıcının aşağıdakileri kullanarak harici depolama izni verilip verilmediğini kontrol etmelisiniz:

if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
    Log.v(TAG,"Permission is granted");
    //File write logic here
    return true;
}

Değilse, kullanıcıdan uygulamanıza izin vermesini istemeniz gerekir:

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);

Tabii ki bunlar sadece hatmi cihazlar içindir, bu nedenle uygulamanızın Marshmallow'da çalışıp çalışmadığını kontrol etmeniz gerekir:

 if (Build.VERSION.SDK_INT >= 23) {
      //do your check here
 }

Etkinliğinizin uygulandığından da emin olun OnRequestPermissionResult

Tüm izin şuna benzer:

public  boolean isStoragePermissionGranted() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED) {
            Log.v(TAG,"Permission is granted");
            return true;
        } else {

            Log.v(TAG,"Permission is revoked");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            return false;
        }
    }
    else { //permission is automatically granted on sdk<23 upon installation
        Log.v(TAG,"Permission is granted");
        return true;
    }
}

İzin sonucu geri çağrısı:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
        Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
        //resume tasks needing this permission
    }
}

2
@Houssem yardımcı olmaktan mutluluk duyar.!
MetaSnarf

14
Bu, API> = 23 için çalışmaz, Manifest.permission.WRITE_EXTERNAL_STORAGEher zaman '-1' için izin ister, yani İzin reddedilir. Yeni belgelere bakın, API 19'dan itibaren WRITE_EXTERNAL_STORAGEizin almanıza gerek olmadığını söylüyor . Yukarıdaki yorumların bazılarında belirtildiği gibi, tüm bunlarıManifest.permission.READ_EXTERNAL_STORAGE
AmeyaB

3
@VSB: Tuhaf bir yer ama işte gidiyorsunuz: developer.android.com/guide/topics/manifest/…
AmeyaB

3
@AmeyB Belgelerin dediği gibi, API> = 19 için, harici depolama birimine yazma izninin bildirilmesi gerekli değildir, EĞER uygulamanın döndürdüğü harici depolama biriminde kendi özel dizinini kullanacaksa getExternalFilesDir(). Diğer durumlarda hala izin android.permission.WRITE_EXTERNAL_STORAGEbildirilmeli.
VSB

1
Evet düzeltildi. Sorun hokey uygulama kütüphanesi ile ilgiliydi. bu kütüphane yazma iznimi geçersiz kılıyor. @MetaSnarf
Selin

38

Android'in izin sistemi, yükleme sırasında bu izinlerin istendiği için en büyük güvenlik sorunlarından biridir. Yüklendikten sonra, uygulama, kullanıcının izni ile uygulamanın tam olarak ne yaptığını kabul etmeden verilen her şeye erişebilir.

Android 6.0 Marshmallow, API 23'ü hedeflediğinizde ve uygulama bir Android 6.0+ cihazında çalışırken mevcut yükleme süresi izinleri modelinin yerini alan yeni bir izin modeli olan çalışma zamanı izinlerinin eklenmesiyle izinler modelinde yapılan en büyük değişikliklerden birini sunuyor

Nezaket , Çalışma Zamanında İzin İsteme bölümüne gider .

Misal

Bunu Global ilan et

private static final int PERMISSION_REQUEST_CODE = 1;

Bunu onCreate()bölümünüze ekleyin

SetContentView sonra (R.layout.your_xml);

 if (Build.VERSION.SDK_INT >= 23)
    {
        if (checkPermission())
        {
            // Code for above or equal 23 API Oriented Device 
            // Your Permission granted already .Do next code
        } else {
            requestPermission(); // Code for permission
        }
    }
  else
    {

       // Code for Below 23 API Oriented Device 
       // Do next code
    }

Şimdi ekleyerek checkPermission () ve requestPermission ()

 private boolean checkPermission() {
    int result = ContextCompat.checkSelfPermission(Your_Activity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (result == PackageManager.PERMISSION_GRANTED) {
        return true;
    } else {
        return false;
    }
}

private void requestPermission() {

    if (ActivityCompat.shouldShowRequestPermissionRationale(Your_Activity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
        Toast.makeText(Your_Activity.this, "Write External Storage permission allows us to do store images. Please allow this permission in App Settings.", Toast.LENGTH_LONG).show();
    } else {
        ActivityCompat.requestPermissions(Your_Activity.this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case PERMISSION_REQUEST_CODE:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Log.e("value", "Permission Granted, Now you can use local drive .");
            } else {
                Log.e("value", "Permission Denied, You cannot use local drive .");
            }
            break;
    }
}

Bilginize

onRequestPermissionsResult

Bu arayüz izin talepleri için sonuçları almak için yapılan sözleşmedir.


29

API düzeyinde 23 Çoklu İzni kontrol etme Adım 1:

 String[] permissions = new String[]{
        Manifest.permission.INTERNET,
        Manifest.permission.READ_PHONE_STATE,
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.VIBRATE,
        Manifest.permission.RECORD_AUDIO,
};

Adım 2:

 private boolean checkPermissions() {
    int result;
    List<String> listPermissionsNeeded = new ArrayList<>();
    for (String p : permissions) {
        result = ContextCompat.checkSelfPermission(this, p);
        if (result != PackageManager.PERMISSION_GRANTED) {
            listPermissionsNeeded.add(p);
        }
    }
    if (!listPermissionsNeeded.isEmpty()) {
        ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), 100);
        return false;
    }
    return true;
}

Aşama 3:

 @Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    if (requestCode == 100) {
        if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // do something
        }
        return;
    }
}

4.Adım: onCreate of Activity in CheckPermissions ();


2
Teşekkürler. Bu, birden fazla izin için umut verici bir cevap gibi görünüyor. Ancak örneklerde biraz eksik. never ask againBirkaç izinle nasıl başa çıkıyor ve eksik? Kullanıcı herhangi bir geri bildirim alıyor mu? Kod pasajlarınızla ilgili bu veya daha fazla yorumun gerçek bir örneğini görmek güzel olurdu.
not2qubit

Eğer başa çıkmak için eğer if (shouldshowpermissionrationale ()) {} ile blok halinde izin ekleme eki etrafında tekrar sorma ... izin gerekiyorsa ve sonsuza kadar reddedilirse
doğrudur

Bu doğru ve optimize edilmiş cevap olmalıdır.
VikaS GuttE

21

Harici depolama birimine yazma konusunda kesin bir gereklilik olmadıkça, dosyaları her zaman uygulama dizinine kaydetmeyi seçebilirsiniz. Benim durumumda dosyaları kaydetmek zorunda kaldım ve 2 ila 3 gün harcadıktan sonra depolama yolunu

Environment.getExternalStorageDirectory()

için

getApplicationContext().getFilesDir().getPath() //which returns the internal app files directory path

tüm cihazlarda cazibe gibi çalışır. Bunun nedeni, Harici depolama birimine yazmak için ek izinlere ihtiyacınız olmasıdır, ancak dahili uygulama dizinine yazmak kolaydır.


bu kodu nereye yazıyorsun Benim kod üzerinde Environment.getExternalStorageDiretory () kullanarak hatırlayamıyorum
royjavelosa

5

marshmallow'da çalışma zamanı iznini kullanmanız gerekir https://developer.android.com/training/permissions/requesting.html

uygulama bilgilerini kontrol edebilirsiniz -> izin

uygulamanız harici depolama alanı yazma izni alıyor mu, almıyor mu


2
aslında bu cevap uygulama bilgisi -> izin kazayı çözdü :), ama ne yapacağım ayrıntıları için diğer cevabı kabul etti. Keşke hem teşekkürler ua çok kabul edebilir
Badr

Android emülatörde indirme probleminde kilitlenen tarayıcı düzeltildi
sdaffa23fdsf

4

Kullanıcı izni reddetti ve uygulama harici diske yazmaya çalışarak hataya neden oluyor.

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted, yay! Do the
                // contacts-related task you need to do.

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}

Https://developer.android.com/training/permissions/requesting.html adresini kontrol edin

Bu video, Çalışma Zamanı izinlerini kullanarak UX hakkında daha iyi bir fikir verecektir https://www.youtube.com/watch?v=iZqDdvhTZj0


1

Marshmallow sürümünden, geliştiricilerin kullanıcıya çalışma zamanı izinleri istemesi gerekir. Çalışma zamanı izinlerini sormak için size tüm süreci vereyim.

Ben burada referans kullanıyorum: marshmallow çalışma zamanı izinleri android .

Öncelikle tüm izinlerin verilip verilmediğini kontrol eden bir yöntem oluşturun

private  boolean checkAndRequestPermissions() {
        int camerapermission = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
        int writepermission = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        int permissionLocation = ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION);
        int permissionRecordAudio = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO);


        List<String> listPermissionsNeeded = new ArrayList<>();

        if (camerapermission != PackageManager.PERMISSION_GRANTED) {
            listPermissionsNeeded.add(Manifest.permission.CAMERA);
        }
        if (writepermission != PackageManager.PERMISSION_GRANTED) {
            listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }
        if (permissionLocation != PackageManager.PERMISSION_GRANTED) {
            listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION);
        }
        if (permissionRecordAudio != PackageManager.PERMISSION_GRANTED) {
            listPermissionsNeeded.add(Manifest.permission.RECORD_AUDIO);
        }
        if (!listPermissionsNeeded.isEmpty()) {
            ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
            return false;
        }
        return true;
    } 

Şimdi yukarıdaki yöntemden sonra çalıştırılan kod. onRequestPermissionsResult()Yöntemi geçersiz kılacağız :

 @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        Log.d(TAG, "Permission callback called-------");
        switch (requestCode) {
            case REQUEST_ID_MULTIPLE_PERMISSIONS: {

                Map<String, Integer> perms = new HashMap<>();
                // Initialize the map with both permissions
                perms.put(Manifest.permission.CAMERA, PackageManager.PERMISSION_GRANTED);
                perms.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED);
                perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED);
                perms.put(Manifest.permission.RECORD_AUDIO, PackageManager.PERMISSION_GRANTED);
                // Fill with actual results from user
                if (grantResults.length > 0) {
                    for (int i = 0; i < permissions.length; i++)
                        perms.put(permissions[i], grantResults[i]);
                    // Check for both permissions
                    if (perms.get(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
                            && perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED 
&& perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED 
&& perms.get(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED) {
                        Log.d(TAG, "sms & location services permission granted");
                        // process the normal flow
                        Intent i = new Intent(MainActivity.this, WelcomeActivity.class);
                        startActivity(i);
                        finish();
                        //else any one or both the permissions are not granted
                    } else {
                        Log.d(TAG, "Some permissions are not granted ask again ");
                        //permission is denied (this is the first time, when "never ask again" is not checked) so ask again explaining the usage of permission
//                        // shouldShowRequestPermissionRationale will return true
                        //show the dialog or snackbar saying its necessary and try again otherwise proceed with setup.
                        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA) 
|| ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) 
|| ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)
 || ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECORD_AUDIO)) {
                            showDialogOK("Service Permissions are required for this app",
                                    new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            switch (which) {
                                                case DialogInterface.BUTTON_POSITIVE:
                                                    checkAndRequestPermissions();
                                                    break;
                                                case DialogInterface.BUTTON_NEGATIVE:
                                                    // proceed with logic by disabling the related features or quit the app.
                                                    finish();
                                                    break;
                                            }
                                        }
                                    });
                        }
                        //permission is denied (and never ask again is  checked)
                        //shouldShowRequestPermissionRationale will return false
                        else {
                            explain("You need to give some mandatory permissions to continue. Do you want to go to app settings?");
                            //                            //proceed with logic by disabling the related features or quit the app.
                        }
                    }
                }
            }
        }

    }

Kullanıcı Reddet seçeneğini tıklarsa showDialogOK()iletişim kutusunu göstermek için yöntem kullanılır

Tıkladığında ise reddet ve ayrıca "Tekrar sormazlar" belirten bir onay kutusuna tıklaması , ardından explain()yöntem iletişim göstermek için kullanılacaktır.

iletişim kutularını gösterme yöntemleri:

 private void showDialogOK(String message, DialogInterface.OnClickListener okListener) {
        new AlertDialog.Builder(this)
                .setMessage(message)
                .setPositiveButton("OK", okListener)
                .setNegativeButton("Cancel", okListener)
                .create()
                .show();
    }
    private void explain(String msg){
        final android.support.v7.app.AlertDialog.Builder dialog = new android.support.v7.app.AlertDialog.Builder(this);
        dialog.setMessage(msg)
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                        //  permissionsclass.requestPermission(type,code);
                        startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:com.exampledemo.parsaniahardik.marshmallowpermission")));
                    }
                })
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                        finish();
                    }
                });
        dialog.show();
    }

Yukarıdaki kod snippet'i bir defada dört izin ister. Ayrıca, gereksinimlerinize göre herhangi bir etkinliğinizde istediğiniz sayıda izin isteyebilirsiniz.


1
   Try this



int permission = ContextCompat.checkSelfPermission(MainActivity.this,
                    android.Manifest.permission.WRITE_EXTERNAL_STORAGE);

     if (permission != PackageManager.PERMISSION_GRANTED) {
                Log.i("grant", "Permission to record denied");

                if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                        android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setMessage(getString(R.string.permsg))
                            .setTitle(getString(R.string.permtitle));

                    builder.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog, int id) {
                            Log.i("grant", "Clicked");
                            makeRequest();
                        }
                    });

                    AlertDialog dialog = builder.create();
                    dialog.show();

                } else {

                    //makeRequest1();
                    makeRequest();
                }
            }


     protected void makeRequest() {
            ActivityCompat.requestPermissions(this,
                    new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    500);
        }



     @Override
        public void onRequestPermissionsResult(int requestCode,
                                               String permissions[], int[] grantResults) {
            switch (requestCode) {
                case 500: {

                    if (grantResults.length == 0
                            || grantResults[0] !=
                            PackageManager.PERMISSION_GRANTED) {

                        Log.i("1", "Permission has been denied by user");

                    } else {

                        Log.i("1", "Permission has been granted by user");

                    }
                    return;
                }

            }
        }

0

Birçok arama yaptıktan sonra Bu kod benim için çalışıyor:

İznin zaten mevcut olup olmadığını kontrol edin: WRITE_EXTERNAL_STORAGE iznini kontrol edin İzin verilsin mi?

if(isReadStorageAllowed()){
            //If permission is already having then showing the toast
            //Toast.makeText(SplashActivity.this,"You already have the permission",Toast.LENGTH_LONG).show();
            //Existing the method with return
            return;
        }else{
            requestStoragePermission();
        }



private boolean isReadStorageAllowed() {
    //Getting the permission status
    int result = ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);

    //If permission is granted returning true
    if (result == PackageManager.PERMISSION_GRANTED)
        return true;

    //If permission is not granted returning false
    return false;
}

//Requesting permission
private void requestStoragePermission(){

    if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)){
        //If the user has denied the permission previously your code will come to this block
        //Here you can explain why you need this permission
        //Explain here why you need this permission
    }

    //And finally ask for the permission
    ActivityCompat.requestPermissions(this,new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_WRITE_STORAGE);
}

Kontrol için geçersiz kılma onRequestPermissionsResult yöntemi kullanıcı izin veya denie

 @Override
 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    //Checking the request code of our request
    if(requestCode == REQUEST_WRITE_STORAGE){

        //If permission is granted
        if(grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){

            //Displaying a toast
            Toast.makeText(this,"Permission granted now you can read the storage",Toast.LENGTH_LONG).show();

        }else{
            //Displaying another toast if permission is not granted
            Toast.makeText(this,"Oops you just denied the permission",Toast.LENGTH_LONG).show();
        }
    }

0

benim için çalıştı

 boolean hasPermission = (ContextCompat.checkSelfPermission(AddContactActivity.this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
    if (!hasPermission) {
        ActivityCompat.requestPermissions(AddContactActivity.this,
                new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                REQUEST_WRITE_STORAGE);
    }

   @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode)
    {
        case REQUEST_WRITE_STORAGE: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {
                //reload my activity with permission granted or use the features what required the permission
            } else
            {
                Toast.makeText(AddContactActivity.this, "The app was not allowed to write to your storage. Hence, it cannot function properly. Please consider granting it this permission", Toast.LENGTH_LONG).show();
            }
        }
    }

}

0

İndirme işleminize başlamadan önce çalışma zamanı izinlerinizi kontrol edin ve izniniz yoksa bu yöntem gibi istek izinleri

requestStoragePermission ()

private void requestStoragePermission(){
    if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
                android.Manifest.permission.READ_EXTERNAL_STORAGE))
        {

        }

        ActivityCompat.requestPermissions(this, 
            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
            STORAGE_PERMISSION_CODE);
}

@Override
public void onRequestPermissionsResult(int requestCode, 
                @NonNull String[] permissions, 
                @NonNull int[] grantResults) {

    if(requestCode == STORAGE_PERMISSION_CODE){
        if(grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
        }
        else{
            Toast.makeText(this,
                           "Oops you just denied the permission", 
                           Toast.LENGTH_LONG).show();
        }
    }
}

0

Basit bir şekilde izin manifest.xml dosyası kullanılarak verilebilir, ancak api seviyesi 23 sdk sürüm 6'ya kadar tamamdı, buradan sonra, izin almak istiyorsak, izin vermek için kullanımı istemeliyiz gerekli.

Bu kodu mainActivity.java dosyasına eklemeniz yeterli

Override
            public void onClick(View view) {
                // Request the permission
                ActivityCompat.requestPermissions(MainActivity.this,
                        new String[]{Manifest.permission.CAMERA},
                        PERMISSION_REQUEST_CAMERA);

CAMERA'yı değiştirin veya isterseniz WRITE_EXTERNAL_STORAGE ile ve benzersiz kodla ekleyin.

                            new String[]{Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    101);

İzin almak için basit kod budur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.