Android M İzinler: onRequestPermissionsResult () çağrılmıyor


291

Uygulamamızı yeni M çalışma zamanı izin sistemini kullanacak şekilde güncelliyoruz. OnRequestPermissionsResult () dışında hepsi çalışıyor. Bir düğmeye basma iznini kontrol etmem gerekiyor ve başarılı olursa kısa mesaj gönderin. Bunu yapmak için izin verdiğimde iletişim kutusu kapanıyor, ancak düğmeye tekrar basana kadar Metin Gönder'i tetiklemiyor.

Hata ayıklama ve onRequestPermissionsResult () yönteminde kesme noktaları ayarladım ama asla içine girmez.

Bu yöntem ilk olarak çağrılır:

    private void askForPermission() {
    String[] permissions = new String[]{Manifest.permission.SEND_SMS};
    ActivityCompat.requestPermissions(getActivity(), permissions, PERMISSIONS_CODE);
}

Sonra benim geri arama şöyle:

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

    if (requestCode == PERMISSIONS_CODE) {
        for (int i = 0; i < permissions.length; i++) {
            String permission = permissions[i];
            int grantResult = grantResults[i];

            if (permission.equals(Manifest.permission.SEND_SMS)) {
                if (grantResult == PackageManager.PERMISSION_GRANTED) {
                    onPPSButtonPress();
                } else {
                    requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSIONS_CODE);
                }
            }
        }
    }
}

Benzer bir sorunla karşılaşan var mı? Bu konuda herhangi bir yardım için teşekkür ederiz. Teşekkürler

Yanıtlar:


576

Aynı sorunla karşılaştım ve çözümü buldum. Destek kitaplığını kullanırken, doğru yöntem çağrılarını kullanmanız gerekir. Örneğin:

  • Ne zaman içinde AppCompatActivity , kullanmak gerekir ActivityCompat.requestPermissions ;
  • When in android.support.v4.app.Fragment , sadece kullanması gereken requestPermissions (bu android.support.v4.app.Fragment örneğidir yöntemidir)

Bir parçada ActivityCompat.requestPermissions öğesini çağırırsanız , onRequestPermissionsResult geri çağırma parçası üzerinde değil etkinlikte çağrılır.

Bu yardımcı olur umarım!


13
Ayrıca Tarihsel olmayan etkinliklerle de gerçekleşir: code.google.com/p/android-developer-preview/issues/…
Anthony Bobenrieth

11
"Android.support.v4.app.Fragment zaman, sadece requestPermissions kullanmalısınız" - teşekkür ederim!
Tigran Sarkisian

5
@AnthonyBobenrieth öyleyse noHistory aktiviteleri için burada çözüm nedir? Onlardan izin isteyemeyiz mi?
Dean Wild

2
Bağlantı koptu @ AnthonyBobenrieth. Tarihsiz bir çözüm var mı?
fersarr

3
Kullanırken Fragment.requestPermissions(), üst Etkinlik aslında onRequestPermissionsResult(). (Bu, 23.3.0 destek kütüphanesi ile birlikte)
birileri

101

Bunu deneyebilirsiniz:

requestPermissions(permissions, PERMISSIONS_CODE);

Bu kodu bir parçadan çağırıyorsanız, kendi requestPermissions yöntemi vardır. Sorun statik yöntem çağırıyor olmasıdır.

Bir ipucu istiyorsanız Pro İpucu onRequestPermissionsResult(): FragmentCompat.requestPermissions(Fragment fragment, String[] permissions, int requestCode)


Yardım için teşekkürler. Onun bir fragment içinde bir requestPermissions yöntemi olduğunu fark ettiniz. Ben bir parça ve sadece requestPermissions aramaya çalıştım, ne yazık ki işe yaramadı. Bahsettiğiniz şeyi de denedim ve işe yaramadı.
AndyOHart

Bu, Android M'de benim için çalıştı. Ancak Pre-M cihazlarında herhangi bir soruna neden olup olmayacağını mı merak ediyorsunuz?
Bala Vishnu

4
@goodgamerguy onRequestPermissionsResit faaliyetinde istek kodunu kullanmadığınızdan emin olun. etkinliğiniz de onRequestPermissionsResult geri aramasını kullanıyorsa, varsayılanı sağlamanız gerekir: super.onRequestPermissionsResult (requestCode, permissions, grantResults);
Timmy Simons

68

Umarım iyi çalışır

Etkinlik için:

 ActivityCompat.requestPermissions(this,permissionsList,REQUEST_CODE);

Parça için:

 requestPermissions(permissionsList,REQUEST_CODE);

SDK 15 ve altı ne olacak?
zulkarnain shah

4
SDK 15, sadece Marshmallow ve üzeri versiyonlar için
izne

50

Ben de bu problemle karşılaştım. Geçmişte / sondalarda olmayan izinleri işleyen etkinliği istiyorsanız, AndroidManifest.xmlgirişinizi değiştirmeniz istenir .

Eğer aktiviteyi ayarlarsanız için aramanız requestPermissionsveya AppCompatActivity.requestPermissionsbirlikte

android:noHistory="true"
android:excludeFromRecents="true"

sizin de AndroidManifest.xmlo zaman onRequestPermissionsResult()denilen edilmeyecektir. Faaliyetiniz Activityveya 'dan türetilmişse bu doğrudur AppCompatActivity.

Bu, her iki bayrağı da 'AndroidManifest.xml'den kaldırarak ve finishAndRemoveTask()bunun yerine etkinliğinizi tamamlayarak düzeltilebilir .


NoHistory özniteliğini kaldırmak zorunda kalmamayı tercih ederdim, ama bu benim için çalışan çözümdü. Teşekkürler!
Eric Schlenz

1
Marshmallow ile ilgili sorunum vardı ama Nougat'ta değil, teşekkür ederim benim için çalıştı
Yohan Dahmani

37

onRequestPermissionsResultHem etkinliğinizde hem de parçanız varsa , etkinlikte aradığınızdan emin olun super.onRequestPermissionsResult. Parça halinde gerekli değildir, ancak faaliyettedir.


Ayrıca, bir API'yi (örneğin 19 gibi) hedeflerseniz, yine de eski izin modeli sistemi altında olacağınızı ve bu nedenle, izinle ilgili işlev çağrılarıyla ilgili istek almadığınızı unutmayın
Bonatti

super çağırmayan başka bir etkinliği genişlettiyseniz
cevabımı görün

3
Bunun üzerine tökezledi. FragmentActivity.onRequestPermissionsResult(..)parçanın çağrısının onRequestPermissionsResult(..)yönlendirildiği yerdir .
JanPl

@Bonatti Yani android 4.4.2'de izin istemeye çalışırsam sonuç alamaz mıyım? Böylece izinleri değiştiremiyorum, sadece onları görüyor musunuz?
Alex Fragotsis

@AlexanderFragotsis Bir sonuç alacaksınız. Tek fark, izin vermeniz istenmeyecek, bunun yerine sistem tarafından otomatik olarak verilecektir.
Dusan Zivkovic

33

Yanıt onaylanmadı lütfen şu adrese bakın: https://developer.android.com/training/permissions/requesting

Parça içinde şunları aramanız gerekir:

FragmentCompat.requestPermissions(permissionsList, RequestCode)

Değil:

ActivityCompat.requestPermissions(Activity, permissionsList, RequestCode);

2
Android.support.v13.app.FragmentCompat ile ilgilidir
Udi Oshi

1
FragmentCompat, API 27.1.0'dan itibaren kullanımdan kaldırılmıştır.
Büyük McLargeHuge

cevabım kullanımdan kaldırıldı, lütfen bakınız: developer.android.com/training/permissions/requesting
Ben.Slama.Jihed

15

RequestPermissions'u parça halinde kullanıyorsanız, 3 yerine 2 parametre kabul eder.

Kullanmalısın requestPermissions(permissions, PERMISSIONS_CODE);


1
Aslında soruya cevap veriyor. ActivityCompat.requestPermissions yerine requestPermissions (parça yöntemi örneği) çağrıldığında, sonuç yöntemi tetiklenir. Burada asıl mesele hangisi. Teşekkür ederim Don
Waclock

15

Herhangi bir nedenden ötürü, bazı harici kütüphanede bulunan ve super çağırmayan özel bir Etkinliği genişlettiyseniz, Fragment super.onRequestPermissionsResult öğesini kendiniz El ile onRequestPermissionsResult etkinliğinizde aramanız gerekir.

YourActivity extends SomeActivityNotCallingSuperOnRequestPermissionsResult{
Fragment requestingFragment;//the fragment requesting the permission
...
@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestingFragment!=null)
            requestingFragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
...

12

FragmentCompat'ta önceden Marshmallow cihazları için checkPermissions işleviniz var . Ben böyle kullanın:

FragmentCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);

2
Bu sadece izin android.app.fragment içinde istenirse ve support-v13 kütüphanesini içe aktarmak zorunda kalırsanız çalışır!
MohammadReza

4
FragmentCompat.requestPermissions () android.support.v4.app.Fragment ile çalışmaz. Herkes bunun üstesinden gelmeyi biliyor.
Jutikorn

12

Aradığın önemli olduğunu öğrendim android.support.v4.app.Fragment.requestPermissions .

Eğer yaparsan onCreate(),onRequestPermissionsResult() asla denir.

Çözüm: Arayın onActivityCreated();

@Override
public void onActivityCreated(Bundle savedInstanceState) {

    super.onActivityCreated(savedInstanceState);

    if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_DENIED) 
        requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, 0);

}

1
Aynı sorunla karşı karşıyayım ama onActivityCreated()koduma giremiyorum. SDK 23.
kAmol


Ben parçalanmış değilim, üzerinde yapmaya çalışıyorumBir etkinlik
oluştur

Hmm, ya da kullanım onPause()?
almisoft

10

Bu soruna aslında NestedFragments neden oluyordu. Temelde çoğu parça bir HostedFragment'ı genişletir ve bu da bir CompatFragment'ı genişletir. Bu yuvalanmış parçalara sahip olmak, sonunda projedeki başka bir geliştirici tarafından çözülen sorunlara neden oldu.

Bu çalışmayı elde etmek için biraz anahtarlama gibi düşük seviyeli şeyler yapıyordu, bu yüzden gerçek nihai çözümden çok emin değilim


Bu sorunumu çözmeme yardımcı oldu: onRequestPermissionsResult öğesini üst parçadan alt (iç içe) parçaya yönlendirmek zorunda kaldım. Bahşiş için teşekkürler!
Murphy

9
 /* use the object of your fragment to call the 
 * onRequestPermissionsResult in fragment after
 * in activity and use different request Code for 
 * both Activity and Fragment */

   if (isFragment)
    mFragment.requestPermissions(permissions.toArray(new
    String[permissions.size()]),requestPermission);

   else
    ActivityCompat.requestPermissions(mActivity,permissions.toArray(new
    String[permissions.size()]),requestPermission);

6

Bu çalışacak..

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

süper uygulama parçaları çerçeve değil hte çerçeve çağırıyor
Mohammad Yahia

5

Bu kodu bir parçadan çağırıyorsanız, kendi requestPermissions yöntemi vardır.

Temel kavram şudur: Eğer bir Faaliyette bulunuyorsanız,

ActivityCompat.requestPermissions(this,
                            permissionsList,
                            permissionscode);

ve eğer bir Fragment ise,

requestPermissions(permissionsList,
                            permissionscode);

1
API seviye 23 gerektirir ... Önceki sürümlerde kullanın FragmentCompat.requestPermissions() .
Minas Mina

5

Ben callIntent tetikleyen bir arama yapmak için bir düğmeye basarak dışında benzer bir sorun vardı. İlk önce izni kontrol ettim, izin verilmediği takdirde izin isterim ve onRequestPermissionResult Kontrol iznini arıyorum ve tekrar ararım.

 @Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case Constants.PERMISSIONS_REQUEST_CALL_PHONE: {
            if ( grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                checkPermissionsAndCall();
            }
        }
    }
}

public void checkPermissionsAndCall(){
    if (Build.VERSION.SDK_INT > 22) {
        if(ContextCompat.checkSelfPermission(getContext(),
                Manifest.permission.CALL_PHONE)
                != PackageManager.PERMISSION_GRANTED){
            requestPermissions( new String[]{Manifest.permission.CALL_PHONE}, Constants.PERMISSIONS_REQUEST_CALL_PHONE);
        }
        else{
            callIntent();
        }
    }
}


2

Yukarıdaki yanıtlara göre her şeyi kontrol etmeden önce, istek kodunuzun 0 olmadığından emin olun !!!

FragmentActivity.java'daki onRequestPermissionsResult () kodunu kontrol edin:

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
        @NonNull int[] grantResults) {
    int index = (requestCode>>16)&0xffff;
    if (index != 0) {
        index--;

        String who = mPendingFragmentActivityResults.get(index);
        mPendingFragmentActivityResults.remove(index);
        if (who == null) {
            Log.w(TAG, "Activity result delivered for unknown Fragment.");
            return;
        }
        Fragment frag = mFragments.findFragmentByWho(who);
        if (frag == null) {
            Log.w(TAG, "Activity result no fragment exists for who: " + who);
        } else {
            frag.onRequestPermissionsResult(requestCode&0xffff, permissions, grantResults);
        }
    }
}

2
private void showContacts() {
    if (getActivity().checkSelfPermission(Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS);
    } else {
        doShowContacts();
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        doShowContacts();
    }
}

2

Bunu yapmak için böyle bir BaseActivity elde etmek için inanılmaz bir çözüm var.

public class BaseActivity extends AppCompatActivity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler(this));


}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
    switch (requestCode) {
        case 1: {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                CustomToast.getInstance().setCustomToast("Now you can share the Hack.");

            } else {
                Toast.makeText(this, "Permission denied to read your External storage", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

}

Şimdi böyle bir izin istemek için kodu çağırabilirsiniz

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

Şimdi bu, parçanızda veya herhangi bir etkinlikte herhangi bir yerde gerçekleştiğinde, temel etkinlik denir.

Teşekkürler


1

Kullanabilirsiniz requestPermissions(PERMISSIONS, MULTIPLE_PERMISSIONS_CODE);. V4 kullanıyorsanız FragmentCompat kullanmayın.


Lütfen nedenini açıklayın.
Yerleştirilebilir

1

ayrıntılar

  • Kotlin 1.2.70
  • minSdkVersion 19'da kontrol edildi
  • Android stüdyosu 3.1.4

Algoritma

modül - kamera, konum, ....

  1. HasSystemFeature'ın (eğer modül telefonda varsa)
  2. Kullanıcının modüle erişimi olup olmadığını kontrol edin
  3. İzin gönderme isteği (kullanıcıdan modül kullanımına izin vermesini isteyin )

Özellikleri

  1. Etkinlikler ve Parçalarla Çalışma
  2. Yalnızca bir sonuç yanıtı var
  3. Bir istekte birden fazla modülü kontrol edebilir

Çözüm

class PermissionType(val manifest_permission: String, val packageManager: String) {
    object Defined {
        val camera = PermissionType(Manifest.permission.CAMERA, PackageManager.FEATURE_CAMERA)
        val currentLocation = PermissionType(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.FEATURE_LOCATION_GPS)
    }
}

class  Permission {

    enum class PermissionResult {
        ACCESS_ALLOWED, ACCESS_DENIED, NO_SYSTEM_FEATURE;
    }

    interface ManagerDelegate {
        fun permissionManagerDelegate(result: Array<Pair<String, PermissionResult>>)
    }

    class Manager internal constructor(private val delegate: ManagerDelegate?) {

        private var context: Context? = null
        private var fragment: Fragment? = null
        private var activity: AppCompatActivity? = null
        private var permissionTypes: Array<PermissionType> = arrayOf()
        private val REQUEST_CODE = 999
        private val semaphore = Semaphore(1, true)
        private var result: Array<Pair<String, PermissionResult>> = arrayOf()


        constructor(permissionType: PermissionType, delegate: ManagerDelegate?): this(delegate) {
            permissionTypes = arrayOf(permissionType)
        }

        constructor(permissionTypes: Array<PermissionType>, delegate: ManagerDelegate?): this(delegate) {
            this.permissionTypes = permissionTypes
        }

        init {
            when (delegate) {
                is Fragment -> {
                    this.fragment = delegate
                    this.context = delegate.context
                }

                is AppCompatActivity -> {
                    this.activity = delegate
                    this.context = delegate
                }
            }
        }

        private fun hasSystemFeature(permissionType: PermissionType) : Boolean {
            return context?.packageManager?.hasSystemFeature(permissionType.packageManager) ?: false
        }

        private fun hasAccess(permissionType: PermissionType) : Boolean {
            return if (Build.VERSION.SDK_INT < 23) true else {
                context?.checkSelfPermission(permissionType.manifest_permission) == PackageManager.PERMISSION_GRANTED
            }
        }

        private fun sendRequest(permissionTypes: Array<String>) {

            if (fragment != null) {
                fragment?.requestPermissions(permissionTypes, REQUEST_CODE)
                return
            }

            if (activity != null){
                ActivityCompat.requestPermissions(activity!!, permissionTypes, REQUEST_CODE)
            }
        }

        fun check() {

            semaphore.acquire()
            AsyncTask.execute {
                var permissionsForSendingRequest: Array<String> = arrayOf()
                this.result = arrayOf()

                for (it in permissionTypes) {
                    if (!hasSystemFeature(it)) {
                        result += Pair(it.manifest_permission, PermissionResult.NO_SYSTEM_FEATURE)
                        continue
                    }

                    if (hasAccess(it)) {
                        result += Pair(it.manifest_permission, PermissionResult.ACCESS_ALLOWED)
                    } else {
                        permissionsForSendingRequest += it.manifest_permission
                    }
                }

                if (permissionsForSendingRequest.isNotEmpty()) {
                    sendRequest(permissionsForSendingRequest)
                } else {
                    delegate?.permissionManagerDelegate(result)
                }
            }
        }

        fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
            when (requestCode) {
                REQUEST_CODE -> {
                    if (grantResults.isEmpty()) {
                        return
                    }
                    for ((i,permission) in permissions.withIndex()) {
                        for (item in this.permissionTypes) {
                            if (permission == item.manifest_permission && i < grantResults.size) {
                                result += if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
                                    Pair(item.manifest_permission, PermissionResult.ACCESS_ALLOWED)
                                } else {
                                    Pair(item.manifest_permission, PermissionResult.ACCESS_DENIED)
                                }
                                break
                            }
                        }
                    }
                    delegate?.permissionManagerDelegate(result)
                }
            }
            semaphore.release()
        }
    }
}

Aktivitede Kullanım (aynı kısımda)

class BaseActivity : AppCompatActivity(), Permission.ManagerDelegate {

    private lateinit var permissionManager: Permission.Manager

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.base_activity)

        permissionManager = Permission.Manager(arrayOf(PermissionType.Defined.camera, PermissionType.Defined.currentLocation), this)
        permissionManager.check()
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        permissionManager.onRequestPermissionsResult(requestCode, permissions, grantResults)
    }


    override fun permissionManagerDelegate(result: Array<Pair<String, Permission.PermissionResult>>) {
        result.forEach {
            println("!!! ${it.first} ${it.second}")
//            when (it.second) {
//                Permission.PermissionResult.NO_SYSTEM_FEATURE -> {
//                }
//
//                Permission.PermissionResult.ACCESS_DENIED  -> {
//                }
//
//                Permission.PermissionResult.ACCESS_ALLOWED -> {
//                }
//            }
        }
    }
}

1

Burada nasıl yönetti benim kod göstermek istiyorum.

public class CheckPermission {

public Context context;

public static final int PERMISSION_REQUEST_CODE =  200;

public CheckPermission(Context context){
    this.context = context;
}

public boolean isPermissionGranted(){
    int read_contact = ContextCompat.checkSelfPermission(context.getApplicationContext() , READ_CONTACTS);
    int phone = ContextCompat.checkSelfPermission(context.getApplicationContext() , CALL_PHONE);

    return read_contact == PackageManager.PERMISSION_GRANTED && phone == PackageManager.PERMISSION_GRANTED;
   }
}

İşte bu sınıfta verilen izni kontrol etmek istiyorum. O zaman değil gibi benim MainActivity izin arayacak

public void requestForPermission() {
       ActivityCompat.requestPermissions(MainActivity.this, new String[]    {READ_CONTACTS, CALL_PHONE}, PERMISSION_REQUEST_CODE);
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case PERMISSION_REQUEST_CODE:
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (shouldShowRequestPermissionRationale(ACCESS_FINE_LOCATION)) {
                    showMessageOKCancel("You need to allow access to both the permissions",
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                                        requestPermissions(new String[]{Manifest.permission.READ_CONTACTS, Manifest.permission.CALL_PHONE},
                                                PERMISSION_REQUEST_CODE);
                                    }
                                }
                            });
                    return;
                }
            }
    }
}

Şimdi onCreate yönteminde requestForPermission () işlevini çağırmanız gerekir.

Ayrıca, aynı anda birden fazla izin isteyebilirsiniz.


1

GÜNCELLEME: başka birinin super.onRequestPermissionResult()Etkinlik çağrısıyla ilgili cevabını gördüm ve bahsettiğim istek kodu sorununu çözdü ve parçanın onRequestPermissionResult öğesini çağırdı.

bu şeyleri yoksay:

Benim için, onRequestPermissionResultaktiviteyi çağırmama rağmenfragment.requestPermission(...) , ama yanlış bir requestCode ile sonuç döndürdü (111 neden 65647 dönüştü ??? asla bilemeyeceğim).

Neyse ki, bu ekranda istediğimiz tek izin bu yüzden istek kodunu görmezden geliyorum (neden şu anda doğru olmadığını anlamak için zamanım yok)


65536 ve 111'i ekleyin, elde edersiniz. Bunun nedeni bit maskeleridir. Bazı konulara bakın.
CoolMind

0

Ayrıca, doğru requestPermissions çağırsanız bile, yine de bu sorunu olabilir bir sorunla karşılaştı. Sorun, üst etkinliğin süper çağırmadan bu yöntemi geçersiz kılabilmesidir. Süper ekleyin ve düzeltilecektir.

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.