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

Android 13'ü (API düzeyi 33) veya sonraki sürümleri hedefleyen ve Wi-Fi bağlantılarını yöneten uygulamalar, NEARBY_WIFI_DEVICES çalışma zamanı izni istemelidir. Bu izin, bir uygulamanın yakındaki kablosuz cihazlara erişimini haklı göstermeyi kolaylaştırır. Android'in önceki sürümlerinde bu uygulamaların bunun yerine ACCESS_FINE_LOCATION iznini bildirmesi 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 Wi-Fi erişimini devre dışı bırakıp Bluetooth erişimini etkin tutamaz.

Uygulamanızın fiziksel konum elde etmediğini net bir şekilde belirtin.

Android 13 veya sonraki sürümleri hedeflediğinizde uygulamanızın konum bilgilerini Wi-Fi API'lerinden alıp almadığını göz önünde bulundurun. Almıyorsa bunu kesin bir şekilde belirtmeniz gerekir. Bu onaylamayı yapmak için aşağıdaki kod snippet'inde gösterildiği gibi, uygulamanızın manifest dosyasında usesPermissionFlags özelliğini neverForLocation olarak ayarlayın. Bu işlem, Bluetooth cihaz bilgilerinin konum için hiçbir zaman kullanılmadığını onayladığınızda 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'leri için ACCESS_FINE_LOCATION izni gerekir. Örnek olarak WifiManager sınıfındaki aşağıdaki yöntemler verilebilir:

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 başka bir şekilde kesin konum bilgisine dayanmadığı sürece, 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 edin.

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 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ümlerin yüklü olduğu cihazlarda Wi-Fi erişim iş akışı gösterilmektedir. Uygulamanızın, kablosuz cihaz bilgilerinden fiziksel konum elde etmediğini beyan ettiğiniz sürece ACCESS_FINE_LOCATION iznini artık bildirmeniz gerekmediğini unutmayın:

1. şekil. Android 13 (API düzeyi 33) veya sonraki sürümleri hedefleyen bir uygulamanın Wi-Fi bilgilerine erişip erişemeyeceğini belirlemeye yönelik akış şeması.

Şekil 2'de, 12L veya daha eski sürümlerin yüklü olduğu cihazlarda Wi-Fi erişimi iş akışı gösterilmektedir. ACCESS_FINE_LOCATION izninin kullanıldığını unutmayın.

Şekil 2. 12L (API düzeyi 32) veya önceki sürümleri hedefleyen bir uygulamanın Wi-Fi bilgilerine erişip erişemeyeceğini belirlemeye yönelik akış şeması