কিভাবে খণ্ডে অনুমতি চেক


92

আমি কোনও খণ্ডের ভিতরে অনুমতি চেক করতে চাই।

আমার কোড:

        // Here, thisActivity is the current activity
        if (ContextCompat.checkSelfPermission(getActivity(),
                Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {


            // Should we show an explanation?
            if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
                    android.Manifest.permission.ACCESS_FINE_LOCATION)) {

                // Show an explanation to the user *asynchronously* -- don't block
                // this thread waiting for the user's response! After the user
                // sees the explanation, try again to request the permission.

            } else {

                // No explanation needed, we can request the permission.

                ActivityCompat.requestPermissions(getActivity(),
                        new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                        1);



                // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
                // app-defined int constant. The callback method gets the
                // result of the request.
            }
        }

কিন্তু onRequestPermissionsResultঅনুমতি বা অস্বীকার পরে বলা হয় না।

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 1: {
            Log.e("test","0");
            // 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.
                //yes

                Log.e("test","1");

                Intent intent = new Intent(getActivity(), MapsActivity.class);
                intent.putExtra("latitude", 35.694828);
                intent.putExtra("longitude", 51.378129);
                startActivity(intent);

            } else {
                utilityFunctions.showSweetAlertWarning(getActivity(),r.getString(R.string.str_warning_title_empty),
                        r.getString(R.string.str_you_must_allow_this_permission_toast),
                        r.getString(R.string.str_warning_btn_login));

                Log.e("test","2");
            }
            return;
        }

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

উত্তর:


50

আমি একটি খণ্ডের ভিতরে অনুমতি চেক করার জন্য নিম্নলিখিত কাজ করেছি।

if (ActivityCompat.checkSelfPermission(getContext(),
            android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
            ActivityCompat.checkSelfPermission(getContext(),
                    android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
         requestPermissions(getActivity(),
                new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION,
                        android.Manifest.permission.ACCESS_FINE_LOCATION},
                REQUEST_LOCATION);
    } else {
        Log.e("DB", "PERMISSION GRANTED");
    }

4
ব্যবহারকারী যদি তা না দেয় তবে আমাদের এখনও অনুমতি চাইতে হবে।
করণ ঠাক্কর

17
মনে রাখবেন যে আপনি যদি এটি করেন তবে আপনার অনুরোধের অনুমতির ফলাফলটি আপনার খণ্ডটি শুরু করার ক্রিয়াকলাপে আসবে। আপনার খণ্ডে ফলাফল পাওয়ার উপায়ের জন্য থিটনাইং মিজোর উত্তর দেখুন ।
lsrom

253

আমি এইভাবেই করেছি, এটি আমার পক্ষে কাজ করে। ধন্যবাদ!

ক্রিয়াকলাপের জন্য:

ActivityCompat.requestPermissions(this, permissionsList, REQUEST_CODE);

খণ্ডের জন্য:

requestPermissions(permissionsList, REQUEST_CODE);

টুকরো টুকরো অনুরোধের জন্য প্রযোজনগুলির জন্য অ্যান্ড্রয়েড এম প্রয়োজন তবে এটি পুরানো এপিআই সংস্করণগুলির জন্য ফ্র্যাগমেন্টকম্পটে উপলব্ধ।
ব্রায়ান হোয়াইট

20
কোনও খণ্ডের অভ্যন্তরে অনুমতি চাওয়ার সঠিক উপায়
তরুন

অনুরোধপরিমিশনগুলি মার্শাল এবং স্তরের স্তরের ব্যবহার করছে
হামিদ

76

টুকরাটির রয়েছে requestPermissions()এবং onRequestPermissionsResult()পদ্ধতিগুলি, এটি ব্যবহার করুন।

কিন্তু checkSelfPermission()থেকে ActivityCompat(প্রয়োজন হয় না Activity, শুধুমাত্র Context)।

if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    requestPermissions( //Method of Fragment
        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
        REQUEST_PERMISSIONS_CODE_WRITE_STORAGE
    );
} else {
    downloadImage();
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == REQUEST_PERMISSIONS_CODE_WRITE_STORAGE) {
        if (permissions[0].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            proceedWithSdCard();
        }
    }
}

টুকরো টুকরো অনুরোধের অনুমতিগুলির জন্য অ্যান্ড্রয়েড এম প্রয়োজন তবে এটি ফ্র্যাগমেন্টকম্পটে উপলব্ধ।
ব্রায়ান হোয়াইট

4

onRequestPermissionsResultক্রিয়াকলাপে বিভক্ত হয় খণ্ড না। onRequestPermissionsResultপরিবর্তে ক্রিয়াকলাপে ওভাররাইড করার চেষ্টা করুন ।


যদিও এটি সত্য, এটি কেন সত্য এবং এটি কীভাবে সংশোধন করতে হবে - কীভাবে onRequestPermissionResultখণ্ডে যাবেন তার ব্যাখ্যাটির অভাব রয়েছে । টুকরো টুকরো করে ফলাফল প্রাপ্তির ব্যাখ্যা এবং উপায় উভয়ই উত্তরটি ThetNaing Mizo দ্বারা ব্যাখ্যা করা হয়েছে ।
lsrom

ধন্যবাদ, আমি ভাবছিলাম যে আমার কোডটি
খণ্ডের

4

কোটলিন ব্যবহার করে, আপনি কল requestPermissions(arrayOf(Manifest.permission.THE_PERMISSION_CODE_YOU_WANT), PERMISSION_REQUEST_CODE)করে আপনার খণ্ডে নিম্নলিখিত ওভাররাইড যুক্ত করুন

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out kotlin.String>, grantResults: IntArray): Unit {

}

4

একটি Fragmentকল requestPermissionsপদ্ধতিতে অনুমতিগুলি পরিচালনা করতে To যদি আপনি onRequestPermissionsResultখণ্ড এবং ক্রিয়াকলাপ উভয় ক্ষেত্রেই সেই অংশটি অন্তর্ভুক্ত করে থাকেন তবে খণ্ডে পদ্ধতিতে super.onRequestPermissionsResult(...)কল প্রচারের জন্য ক্রিয়াকলাপ পদ্ধতিতে কল করার বিষয়টি নিশ্চিত করুন onRequestPermissionsResult


3

কি আমার জন্য কাজ কলিং ছিল onRequestPermissionsResult পদ্ধতি কার্যকলাপ যা ভিতরে টুকরা টুকরা নিজেই ফোন করে বলে বদলে বাস্তবায়িত হয়। খণ্ডে অনক্রিটভিউ পদ্ধতির ভিতরে :

    Button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int permissionCheck = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE);

            if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_MEDIA);
            }else{
                //Do your work
                fetchMethod();
            }

        }
});

ক্রিয়াকলাপে যা অনক্রিট পদ্ধতিটির বাইরে খণ্ডকে কার্যকর করতে সহায়তা করে :

    @Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_MEDIA:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                fetchMethod();

            }else{
                Toast.makeText(getApplicationContext(), "Permission not granted!", Toast.LENGTH_SHORT).show();
            }
            break;

        default:
            break;
    }
}

2

যদি আপনি সেটিংস থেকে অ্যাপের অনুমতি বন্ধ করে দেন তবে আপনি কোড থেকে আপনার অনুমতি বা মার্শম্যালোর চেয়ে কম অ্যান্ড্রয়েড সংস্করণ খুলতে পারবেন না।

আপনি এই ডকুমেন্টেশনটি https://developer.android.com/training/permission/requesting.html যাচাই করতে পারেন এবং এটি একটি উদাহরণ https://www.learn2crack.com/2015/10/android-marshmallow-perifications.html


0

আমি ব্যবহার আপ হোঁচট খেয়েছি পেয়ে ছিল checkSelfPermission()একটি Fragmentএবং হতাশ কি জন্য সবচেয়ে ভালো উপায় হবে Contextনাল হচ্ছে (Kotlin নির্দিষ্ট) ... আমি ব্যবহার করা উচিত !!বা অন্য কিছু ?

আমি আইওএসএডে পাওয়া কোডের ভিত্তিতে অন্য কিছু দিয়েছিলাম । নীচের নমুনাটি দেখুন এবং মনে রাখবেন, Fragmentকোনওটি সংযুক্ত হওয়ার আগে Activity, এটি Contextশূন্য হবে।

private fun fineLocationPermissionApproved(): Boolean {

    val context = context ?: return false

    return PackageManager.PERMISSION_GRANTED == checkSelfPermission(
        context,
        Manifest.permission.ACCESS_FINE_LOCATION
    )
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.