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 şunu istemelidir: NEARBY_WIFI_DEVICES çalışma zamanı iznine sahip olmanız gerekir. 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'ın bir parçasıdır. izin grubu. Android 12'ye (API düzeyi 31) eklenen bu grupta Bluetooth ve ultra geniş bant ile ilgili izinler de yer alır. Herhangi bir bu izin grubundaki izinlerin bir kombinasyonunu görüyorsanız sistem, tek bir çalışma zamanı iletişim kutusunda yer alır 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 kablosuz ağ erişimini devre dışı bırakırken belirli bir uygulama için Bluetooth erişimini etkin tutamaz.

Uygulamanızın fiziksel konumu elde etmediğini kesin bir şekilde beyan edin

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 onaylamayı yapmak için usesPermissionFlags özelliğini Aşağıdaki kodda gösterildiği gibi, uygulamanızın manifest dosyasında neverForLocation snippet'i 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 için 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>

İzin gerektiren API'leri kontrol edin

Uygulamanız Android 13 veya sonraki bir sürümü hedefliyorsa Aşağıdaki kablosuz API'lerini çağırmak için NEARBY_WIFI_DEVICES izni:

Kablosuz erişim iş akışları

Şekil 1'de, çalışan cihazlardaki kablosuz erişimi iş akışı gösterilmektedir Şu kitleyi hedefleyen uygulamalar için Android 13 veya sonraki sürümler: Android 13 veya sonraki sürümler. Uygulamanızın kablosuz ağ cihaz bilgilerinden fiziksel konum elde etmediğini beyan ettiğiniz sürece artık ACCESS_FINE_LOCATION iznini belirtmeniz gerekmediğini unutmayın:

Şekil 1. Akış grafiği bir uygulamanın Android 13 (API düzeyi 33) veya sonraki bir sürümü hedefleyip hedeflemediğini belirlemek için kablosuz ağ bilgilerine erişebilir.

Şekil 2'de, çalışan cihazlardaki kablosuz erişimi iş akışı gösterilmektedir 12L veya daha düşük. 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 kablosuz ağ bilgilerine erişip erişemeyeceğini belirlemek için akış şeması