Yakındaki kablosuz cihazlara erişmek için izin isteyin

Android 13 (API düzeyi 33) veya sonraki sürümleri hedefleyen ve kablosuz bağlantıları yöneten uygulamalar, NEARBY_WIFI_DEVICES çalışma anı izni istemelidir. Bu izin, bir uygulamanın yakındaki kablosuz cihazlara erişimini gerekçelendirmeyi kolaylaştırır. Android'in önceki sürümlerinde bu uygulamaların bunun yerine ACCESS_FINE_LOCATION iznini belirtmesi gerekiyordu.

İzin, yakındaki cihazlar grubunun bir parçasıdır

NEARBY_WIFI_DEVICES izni, Yakındaki cihazlar izin grubunun bir parçasıdır. Android 12'de (API düzeyi 31) eklenen bu grup, Bluetooth ve ultra geniş bant ile ilgili izinleri de içerir. Bu izin grubundan herhangi bir izin kombinasyonu istediğinizde sistem tek bir çalışma zamanı iletişim kutusu gösterir ve kullanıcıdan uygulamanızın yakındaki cihazlara erişimini onaylamasını ister. Sistem ayarlarında kullanıcının Yakındaki cihazlar izinlerini grup olarak etkinleştirmesi ve devre dışı bırakması gerekir. Örneğin, kullanıcılar belirli bir uygulama için kablosuz ağ erişimini devre dışı bırakırken Bluetooth erişimini etkin tutamaz.

Uygulamanızın fiziksel konum elde etmediğini iddia etmek

Android 13 veya sonraki sürümleri hedeflediğinizde, uygulamanızın hiç Wi-Fi API'lerinden konum bilgisi alıp almadığını düşünün. Aksi takdirde, bunu kesinlikle belirtmeniz gerekir. Bu iddiayı yapmak için uygulamanızın manifest dosyasında usesPermissionFlags özelliğini aşağıdaki kod snippet'inde gösterildiği gibi neverForLocation olarak ayarlayın. Bu işlem, Bluetooth cihaz bilgilerinin hiçbir zaman konum için kullanılmadığını iddia ettiğinizde yaptığınız işleme benzer:

<manifest ...>
    <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
                     android:usesPermissionFlags="neverForLocation" />
    <application ...>
        ...
    </application>
</manifest>

Önceki sürümler ve bazı API'ler için konum izni gerekir

Uygulamanız Android 13 veya sonraki sürümleri hedeflese bile çeşitli kablosuz API'ler ACCESS_FINE_LOCATION iznini gerektirir. Örnekler arasında WifiManager sınıfındaki aşağıdaki yöntemler yer alır:

Ayrıca, NEARBY_WIFI_DEVICES izni yalnızca Android 13 ve sonraki sürümlerde kullanılabildiğinden, uygulamanızda geriye dönük uyumluluk sağlamak için ACCESS_FINE_LOCATION ile ilgili tüm bildirimleri korumanız gerekir. Ancak uygulamanız tam konum bilgilerini kullanmadığı sürece, aşağıdaki kod snippet'inde gösterildiği gibi bu iznin maksimum SDK sürümünü 32 olarak ayarlayabilirsiniz:

<manifest ...>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
                     android:maxSdkVersion="32" />
    <application ...>
        ...
    </application>
</manifest>

İzni gerektiren API'leri kontrol edin

Uygulamanız Android 13 veya sonraki bir sürümü hedefliyorsa aşağıdaki Wi-Fi API'lerini çağırmak için NEARBY_WIFI_DEVICES iznini beyan etmeniz gerekir:

Kablosuz erişim iş akışları

Şekil 1'de, Android 13 veya sonraki sürümleri hedefleyen uygulamalar için Android 13 veya sonraki sürümleri çalıştıran cihazlardaki kablosuz erişim iş akışı gösterilmektedir. Uygulamanızın kablosuz cihaz bilgilerinden fiziksel konum elde etmediğini iddia ettiğiniz sürece artık ACCESS_FINE_LOCATION iznini beyan etmeniz gerekmez:

Şekil 1. Android 13 (API düzeyi 33) veya sonraki sürümleri hedefleyen bir uygulamanın kablosuz ağ bilgilerine erişip erişemeyeceğini belirlemek için akış grafiğine göz atın.

Şekil 2'de, 12L veya daha eski sürümlerin yüklü olduğu cihazlardaki kablosuz erişim iş akışı gösterilmektedir. ACCESS_FINE_LOCATION izninin kullanımını not edin.

Şekil 2. 12L (API düzeyi 32) veya daha düşük bir sürümü hedefleyen bir uygulamanın kablosuz ağ bilgilerine erişip erişemediğini belirlemek için akış grafiğine göz atın.