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 zamanında istenen izni talep etmelidir. 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 beyan etmesi 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. Kullanıcı, sistem ayarlarında Yakındaki cihazlar izinlerini grup olarak etkinleştirmeli ve devre dışı bırakmalıdır. Örneğin, kullanıcılar belirli bir uygulama için kablosuz erişimini devre dışı bırakıp Bluetooth erişimini etkin tutamaz.

Uygulamanızın fiziksel konum bilgisi almadığını kesin olarak belirtme

Android 13 veya sonraki sürümleri hedeflediğinizde uygulamanızın kablosuz API'lerinden konum bilgisi alıp almadığını göz önünde bulundurun. Almadığı takdirde bunu kesin bir şekilde belirtmeniz gerekir. Bu iddiada bulunmak için uygulamanızın manifesto dosyasında usesPermissionFlags özelliğini neverForLocation olarak ayarlayın. Bunu aşağıdaki kod snippet'inde görebilirsiniz. Bu işlem, Bluetooth cihaz bilgilerinin hiçbir zaman konum için kullanılmadığını onaylarken 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 konum izni gerektirir

Uygulamanız Android 13 veya sonraki sürümleri hedeflese bile çeşitli kablosuz API'ler ACCESS_FINE_LOCATION iznini gerektirir. Örnek olarak WifiManager sınıfındaki aşağıdaki yöntemleri gösterebiliriz:

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 beyanları saklamanız gerekir. Ancak uygulamanız tam konum bilgisine başka bir şekilde bağlı değilse bu iznin maksimum SDK sürümünü aşağıdaki kod snippet'inde gösterildiği gibi 32 olarak ayarlayabilirsiniz:

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

İzin gerektiren API'leri kontrol etme

Uygulamanız Android 13 veya sonraki sürümleri hedefliyorsa aşağıdaki kablosuz ağ API'lerinden herhangi birini çağırmak için NEARBY_WIFI_DEVICES iznini beyan etmeniz gerekir:

Kablosuz ağ erişimi 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 cihazlarda kablosuz erişim iş akışı gösterilmektedir. Uygulamanızın kablosuz cihaz bilgilerinden fiziksel konum türetmediğini beyan ettiğiniz sürece 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 bağlantı bilgilerine erişip erişemeyeceğini belirlemek için akış şeması

Şekil 2'de, 12L veya daha eski sürümleri çalıştıran cihazlardaki kablosuz erişim iş akışı gösterilmektedir. ACCESS_FINE_LOCATION iznine olan bağımlılığa dikkat edin.

Şekil 2. 12L (API düzeyi 32) veya daha düşük bir sürümü hedefleyen bir uygulamanın kablosuz bağlantı bilgilerine erişip erişemeyeceğini belirlemek için akış şeması.