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ı iznini istemelidir. Bu izin, bir uygulamanın yakındaki kablosuz cihazlara erişiminin gerekçelendirilmesini kolaylaştırır. Android'in önceki sürümlerinde bu uygulamaların ACCESS_FINE_LOCATION iznini beyan etmesi gerekiyordu.

İzin yakındaki cihazlar grubunun bir parçası

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ının sistem ayarlarında Yakındaki cihazlar izinlerini grup olarak etkinleştirmesi ve devre dışı bırakması gerekir. Örneğin, kullanıcılar kablosuz erişimini devre dışı bırakamaz, ancak belirli bir uygulama için Bluetooth erişimini etkin durumda tutamaz.

Kesinlikle uygulamanızın fiziksel konum bilgisi içermediğini iddia edin

Android 13 veya sonraki bir sürümü hedeflerken uygulamanızın konum bilgilerini Wi-Fi API'lerinden elde edip etmediğini düşünün; aksi takdirde bunu kesinlikle belirtmeniz gerekir. Bu onayı yapmak için uygulamanızın manifest dosyasında aşağıdaki kod snippet'inde gösterildiği gibi usesPermissionFlags özelliğini neverForLocation olarak ayarlayın. Bu işlem, Bluetooth cihaz bilgilerinin konum için hiçbir zaman 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 konum izni gerektirir

Uygulamanız Android 13 veya sonraki bir sürümü hedeflese bile birçok Wi-Fi API için ACCESS_FINE_LOCATION izni gerekir. Örnekler arasında WifiManager sınıfından 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 beyanları saklamanız gerekir. Ancak uygulamanız tam konum bilgilerine başka şekilde bağlı olmadığı 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 et

Uygulamanız Android 13 veya sonraki bir sürümü hedefliyorsa aşağıdaki kablosuz API'lerden 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ümleri çalıştıran cihazlarda kablosuz erişim iş akışı gösterilmektedir. Uygulamanızın, kablosuz ağ cihaz bilgilerinden fiziksel konum elde etmediğini iddia ettiğiniz sürece ACCESS_FINE_LOCATION iznini artık beyan etmenize gerek olmadığını unutmayın:

Ş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 belirleyen akış grafiği.

Şekil 2'de 12 L veya daha düşük hızlarda çalışan cihazlarda kablosuz erişimi iş akışı gösterilmektedir. ACCESS_FINE_LOCATION iznini kullandığınıza dikkat edin.

Şekil 2. 12L (API düzeyi 32) veya daha düşük sürümleri hedefleyen bir uygulamanın kablosuz ağ bilgilerine erişip erişemeyeceğini belirleyen akış grafiği.