মার্শমেলোতে স্টোরেজ অনুমতি ত্রুটি


159

ললিপপে, ডাউনলোডের কার্যকারিতাটি আমার অ্যাপ্লিকেশনটিতে দুর্দান্ত কাজ করে তবে আমি যখন মার্শমেলোতে আপগ্রেড করি তখন আমার অ্যাপটি ক্র্যাশ হয়ে যায় এবং এসডি কার্ডে ইন্টারনেট থেকে ডাউনলোড করার চেষ্টা করার সময় এই ত্রুটিটি দেয়:

Neither user  nor current process has android.permission.WRITE_EXTERNAL_STORAGE

কোডের এই লাইন সম্পর্কে এটি অভিযোগ করে:

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

বাইরের অ্যাপ্লিকেশনটিতে আমার কাছে অনুমতি রয়েছে:

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

আমি প্রকল্পটি পরিষ্কার এবং পুনর্নির্মাণ করেছি, তবে এটি এখনও ক্র্যাশ।


এটি চেষ্টা করুন এটি আপনাকে সহায়তা করতে পারে: - stackoverflow.com/a/41221852/5488468
বিপিন ভারতী

আমি একটি লাইব্রেরি তৈরি করেছি যা রানটাইম অনুমতিগুলি সহজেই পরিচালনা করতে সহায়তা করবে। github.com
নবীন ভান্ডারী

উত্তর:


357

আপনার ব্যবহার করা উচিত যে ব্যবহারকারীর দ্বারা বাহ্যিক স্টোরেজটির অনুমতি দেওয়া হয়েছে কিনা:

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

যদি তা না হয় তবে আপনাকে ব্যবহারকারীকে আপনার অ্যাপ্লিকেশনটিকে অনুমতি দেওয়ার জন্য জিজ্ঞাসা করতে হবে:

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

অবশ্যই এগুলি মার্শমেলো ডিভাইসের জন্য তাই আপনার অ্যাপটি মার্শমেলোতে চলছে কিনা তা পরীক্ষা করে দেখার দরকার:

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

আপনার কার্যকলাপ প্রয়োগ করে তাও নিশ্চিত হন OnRequestPermissionResult

সম্পূর্ণ অনুমতিটি এর মতো দেখাচ্ছে:

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;
    }
}

অনুমতি ফলাফল কলব্যাক:

@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
@ হুসেম সাহায্যে খুশি!
মেটাসনার্ফ

14
এটি Manifest.permission.WRITE_EXTERNAL_STORAGEসর্বদা '-1' ফেরতের জন্য অনুমতির অনুরোধ করে অর্থাৎ অনুমতি অস্বীকার করে, এটি API> = 23 এর জন্য কাজ করে না । নতুন ডকুমেন্টেশন চেক করুন, এটিতে বলা হয়েছে যে এপিআই 19 এর পরে আপনার WRITE_EXTERNAL_STORAGEঅনুমতি লাগবে না । উপরে উল্লিখিত কয়েকটি মন্তব্য হিসাবে, আপনারManifest.permission.READ_EXTERNAL_STORAGE
এমেয়াবি

3
@ ভিএসবি: এটি অদ্ভুত জায়গায় তবে আপনি এখানে যান: ডেভেলপার.আ্যান্ড্রয়েড.
com

3
@ অ্যামিবি ডকুমেন্টেশন যেমন বলেছে, এপিআই> = ১৯ এর জন্য, বাহ্যিক স্টোরেজে লেখার অনুমতি ঘোষণার প্রয়োজন নেই, যদি অ্যাপ্লিকেশনটি বাহ্যিক স্টোরেজে তার নিজস্ব নির্দিষ্ট ডিরেক্টরি ব্যবহার করে যা দ্বারা ফিরে আসে getExternalFilesDir()। অন্যান্য ক্ষেত্রে, এখনও android.permission.WRITE_EXTERNAL_STORAGEম্যানফেস্টে অনুমতি ঘোষণা করতে হবে।
ভিএসবি

1
হ্যাঁ এটা ঠিক আছে। সমস্যাটি হকি অ্যাপ লাইব্রেরির সাথে সম্পর্কিত ছিল। এই গ্রন্থাগারটি আমার লেখার অনুমতিটিকে ওভাররাইড করে চলেছে। @ মেটাসনার্ফ
সেলিন

38

ইনস্টলের সময় এই অনুমতিগুলির জন্য অনুরোধ করা হওয়ায় অ্যান্ড্রয়েডের অনুমতি ব্যবস্থা হ'ল সর্বত্র অন্যতম বৃহত সুরক্ষা উদ্বেগ। একবার ইনস্টল হয়ে গেলে অ্যাপ্লিকেশনটি অনুমতি দিয়ে ঠিক কী অ্যাপ্লিকেশনটি ব্যবহার করে তা কোনও ব্যবহারকারীর স্বীকৃতি ছাড়াই প্রদত্ত সমস্ত জিনিস অ্যাক্সেস করতে সক্ষম হবে।

অ্যান্ড্রয়েড .0.০ মার্শমেলো রানটাইম অনুমতি সংযোজন সহ অনুমতি মডেলের সবচেয়ে বড় পরিবর্তনগুলির সাথে একটি পরিচয় করিয়ে দেয়, একটি নতুন অনুমতি মডেল যা আপনি যখন এপিআই 23 টার্গেট করেন এবং অ্যাপ্লিকেশনটি Android 6.0+ ডিভাইসে চলছে তখন বিদ্যমান ইনস্টল সময়ের অনুমতিগুলির মডেলটিকে প্রতিস্থাপন করে

সৌজন্য রান রান সময় অনুমতি অনুরোধ করতে যায় ।

উদাহরণ

এটি গ্লোবাল হিসাবে ঘোষণা করুন

private static final int PERMISSION_REQUEST_CODE = 1;

এটি আপনার onCreate()বিভাগে যুক্ত করুন

সেট কনটেন্টভিউয়ের পরে (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
    }

এখন চেকপ্রেমিশন যোগ করুন () এবং অনুরোধপিরমিশন ()

 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;
    }
}

অবগতির জন্য

onRequestPermissionsResult

এই ইন্টারফেসটি অনুমতি অনুরোধের জন্য ফলাফল পাওয়ার চুক্তি।


29

এপিআই স্তরের একাধিক অনুমতি পরীক্ষা করুন 23 পদক্ষেপ 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,
};

ধাপ ২:

 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;
}

ধাপ 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: ক্রিয়াকলাপের চেকপিরিশনগুলির ক্রিয়েটে ();


2
ধন্যবাদ। এটি একাধিক অনুমতিগুলির জন্য একটি প্রতিশ্রুতিবদ্ধ উত্তরের মতো দেখতে। তবে এর উদাহরণগুলির কিছুটা অভাব রয়েছে। এটি কীভাবে never ask againকয়েকটি অনুমতি সহকারে এবং নিখোঁজ হয়? ব্যবহারকারী কি কোনও প্রতিক্রিয়া পান? আপনার কোড স্নিপেটে এটির বা আরও কমেন্টের প্রকৃত উদাহরণটি দেখতে ভাল লাগত।
not2qubit

পুনরায় মোকাবিলা করার জন্য জিজ্ঞাসা করবেন না যদি অনুমতিগুলিতে অ্যাড যোগ করুন (ifshowpermissionrationale ()) block with এর সাথে ব্লক করুন ... যদি অনুমতি প্রয়োজন হয় এবং চিরতরে বরখাস্ত না হয় তবে সত্য
me_

এটির একটি সঠিক এবং অনুকূলিত উত্তর হওয়া উচিত।
ভিকাস গুট্টে

21

বাহ্যিক স্টোরেজে লেখার একটি নির্দিষ্ট প্রয়োজনীয়তা না থাকলে আপনি সবসময় অ্যাপ ডিরেক্টরিতে ফাইল সংরক্ষণ করা চয়ন করতে পারেন। আমার ক্ষেত্রে আমাকে ফাইলগুলি সংরক্ষণ করতে হয়েছিল এবং 2 থেকে 3 দিন নষ্ট করার পরে আমি জানতে পেরেছিলাম যে আমি স্টোরেজটির পথটি পরিবর্তন করেছি কিনা

Environment.getExternalStorageDirectory()

প্রতি

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

এটি সমস্ত ডিভাইসে কবজির মতো কাজ করে। এটি কারণ বাহ্যিক স্টোরেজে লেখার জন্য আপনাকে অতিরিক্ত অনুমতি প্রয়োজন তবে অভ্যন্তরীণ অ্যাপ্লিকেশন ডিরেক্টরিতে লেখা সহজ।


আপনি এই কোডটি কোথায় লিখবেন? আমি আমার কোডে এনভায়রনমেন্ট.জেট
এক্সটার্নাল স্টোরেজডাইরেটরি

5

মার্শমেলোতে আপনাকে রানটাইম অনুমতি ব্যবহার করতে হবে https://developer.android.com/training/permission/requesting.html

আপনি অ্যাপের তথ্য -> অনুমতিতে চেক করতে পারেন

আপনার অ্যাপ্লিকেশনটি কি বাহ্যিক স্টোরেজ লেখার অনুমতি পায় কি না


2
প্রকৃতপক্ষে এই উত্তর অ্যাপ্লিকেশন তথ্য -> অনুমতি ক্র্যাশের সমাধান করেছে :), তবে আমি কী করব তার বিশদটির জন্য অন্য উত্তরটি গ্রহণ করে। আমি আশা করি উভয়কে ধন্যবাদ ua অনেক গ্রহণ করতে পারি
Badr

ধন্যবাদ যে অ্যান্ড্রয়েড এমুলেটরে ডাউনলোডের সমস্যার কারণে ব্রাউজারটি সংশোধন করে দিয়েছে
sdaffa23fdsf

4

মনে হয় ব্যবহারকারী অনুমতি বাতিল করেছেন এবং অ্যাপ্লিকেশনটি ত্রুটির কারণ হয়ে বহিঃস্থ ডিস্কে লেখার চেষ্টা করেছে।

@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

এই ভিডিওটি আপনাকে ইউএক্স সম্পর্কে আরও ভাল ধারণা দেবে, রানটাইম অনুমতিগুলি পরিচালনা করে https://www.youtube.com/watch?v=iZqDdvhTZj0


1

মার্শম্যালো সংস্করণ থেকে, বিকাশকারীদের ব্যবহারকারীর জন্য রানটাইম অনুমতি চাইতে হবে। রানটাইম অনুমতি জিজ্ঞাসা করার জন্য আমাকে পুরো প্রক্রিয়াটি দিই।

আমি এখান থেকে রেফারেন্স ব্যবহার করছি: মার্শমেলো রানটাইম অনুমতি অ্যান্ড্রয়েড

প্রথমে একটি পদ্ধতি তৈরি করুন যা সমস্ত অনুমতি দেওয়া হয়েছে কিনা তা যাচাই করে

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;
    } 

এখন এখানে কোড যা উপরের পদ্ধতির পরে চালিত হয়। আমরা onRequestPermissionsResult()পদ্ধতি ওভাররাইড করব :

 @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.
                        }
                    }
                }
            }
        }

    }

যদি ব্যবহারকারী অস্বীকার বিকল্পে ক্লিক করেন তবেshowDialogOK() ডায়ালগ দেখানোর জন্য পদ্ধতিটি ব্যবহার করা হবে

যদি ব্যবহারকারী অস্বীকার করে এবং "আবার কখনও জিজ্ঞাসা করবেন না" বলে একটি চেকবক্সও ক্লিক করে , তবেexplain() ডায়ালগ দেখানোর জন্য পদ্ধতিটি ব্যবহার করা হবে।

কথোপকথন দেখানোর পদ্ধতি:

 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();
    }

উপরের কোড স্নিপেট একসাথে চারটি অনুমতি চাইবে। আপনি আপনার প্রয়োজনীয়তা অনুসারে আপনার যে কোনও ক্রিয়াকলাপে অনেক সংখ্যক অনুমতি চাইতে পারেন।


0

প্রচুর অনুসন্ধানের পরেও এই কোডটি আমার পক্ষে কাজ করে:

অনুমতিটি ইতিমধ্যে রয়েছে তা পরীক্ষা করুন: WRITE_EXTERNAL_STORAGE অনুমতি চেক করুন না অনুমোদিত?

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);
}

ওভাররাইড onRequestPermissionResult পদ্ধতি পরীক্ষা করার জন্য কার্যকর পদ্ধতিটি ব্যবহারকারীকে অনুমতি দেয় বা অস্বীকার করে

 @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

এটা আমার জন্য কাজ

 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
   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

আপনার ডাউনলোড শুরু করার আগে আপনার রানটাইম অনুমতিগুলি পরীক্ষা করুন এবং যদি আপনার কাছে অনুমতি না থাকে তবে এই পদ্ধতির মতো অনুরোধের অনুমতিগুলি রয়েছে

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

সরল উপায়ে ম্যানিফেস্ট.এক্সএমএল ফাইল ব্যবহার করে অনুমতি দেওয়া যেতে পারে তবে এপিআই স্তরের ২৩ এসডিকে সংস্করণ 6 অবধি এটি ঠিক ছিল, এখানের পরে যদি আমরা অনুমতি পেতে চাই তবে আমাদের অনুমতিটি ব্যবহারের জন্য জিজ্ঞাসা করতে হবে যা প্রয়োজন হয়।

মূলঅ্যাক্টিভিটি.জভাতে কেবল এই কোডটি যুক্ত করুন

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

CAMERA প্রতিস্থাপন করুন বা WRITE_EXTERNAL_STORAGE এর সাথে যুক্ত করতে চাইলে এবং অনন্য কোড যুক্ত করুন।

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

অনুমতি পাওয়ার জন্য এটি সহজ কোড।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.