Uygulamanızda Bluetooth özelliklerini kullanmak için birkaç izin beyan etmeniz gerekir. Ayrıca, uygulamanızın Bluetooth klasik veya Bluetooth Düşük Enerji (BDE) desteğine ihtiyaç duyup duymadığını belirtmeniz gerekir. Eğer Uygulama Bluetooth klasik veya BDE gerektirmez ancak yine de bu özelliklerden yararlanabilir çalışma zamanında kullanılabilir olup olmadığını kontrol edebilirsiniz.
İzinleri bildirme
Uygulamanızda beyan ettiğiniz izin grubu, uygulamanızın hedefine bağlıdır SDK sürümü.
Android 12 veya sonraki sürümleri hedefleme
Not: Android 8.0 (API düzeyi 26) ve sonraki sürümlerde Tamamlayıcı Cihaz Yöneticisi (CDM), TV'nize bağlanmak için daha kolay bir yöntem sunar. bu bölümde açıklanan izinlerle karşılaştırılmıştır. İlgili içeriği oluşturmak için kullanılan CDM sistemi, uygulamanız adına bir eşleme kullanıcı arayüzü sağlar ve konum izinleri.
Eşleme ve bağlantı deneyimi üzerinde daha fazla kontrol sahibi olmak istiyorsanız bu bölümde açıklanan izinleri kullanın.
Uygulamanız Android 12 (API düzeyi 31) veya sonraki sürümleri hedefliyorsa uygulamanızın manifest dosyasında aşağıdaki izinleri beyan edin:
- Uygulamanız Bluetooth'u arıyorsa
cihazlar; örneğin
BDE çevre birimleri için
BLUETOOTH_SCAN
izni gerekir. - Uygulamanız, geçerli cihazı diğer Bluetooth cihazları tarafından bulunabilir duruma getirirse
cihaz,
şunu beyan etmek:
BLUETOOTH_ADVERTISE
izni gerekir. - Uygulamanız zaten eşlenmiş Bluetooth ile iletişim kuruyorsa
beyanda bulunun
BLUETOOTH_CONNECT
izni gerekir. - Eski Bluetooth ile ilgili izin beyanlarınız için
android:maxSdkVersion
-30
. Bu uygulama uyumluluğu adımı, sisteme uygulamanıza yalnızca yüklü olduğunda ihtiyaç duyduğu Bluetooth izinlerini ver Android 12 veya sonraki sürümleri çalıştıran cihazlar. - Uygulamanız fiziksel konum elde etmek için Bluetooth tarama sonuçlarını kullanıyorsa şunu beyan edin:
"the"
ACCESS_FINE_LOCATION
izni gerekir. Aksi takdirde, uygulamanızın fiziksel konumu elde etmediğini kesin bir şekilde beyan edebilirsiniz.
BLUETOOTH_ADVERTISE
, BLUETOOTH_CONNECT
ve BLUETOOTH_SCAN
izinleri
çalışma zamanı izinleri.
Bu nedenle, açıkça belirtmek gerekirse kullanıcının
onayınızı almadan
Bluetooth cihazlar, bir cihazı diğer cihazlar tarafından bulunabilir hale getirme veya
zaten eşlenmiş Bluetooth cihazlarla Uygulamanız
bu izinleri verdiğinizde sistem, kullanıcıdan uygulamanızın erişmesine izin vermesini ister
Yakındaki cihazlar, Şekil 1'de gösterildiği gibidir.
Aşağıdaki kod snippet'i, Bluetooth ile ilgili Android 12 veya sonraki bir sürümü hedefliyorsa uygulamanızdaki izinler:
<manifest>
<!-- Request legacy Bluetooth permissions on older devices. -->
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<!-- Needed only if your app looks for Bluetooth devices.
If your app doesn't use Bluetooth scan results to derive physical
location information, you can
<a href="#assert-never-for-location">strongly assert that your app
doesn't derive physical location</a>. -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<!-- Needed only if your app makes the device discoverable to Bluetooth
devices. -->
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<!-- Needed only if your app communicates with already-paired Bluetooth
devices. -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- Needed only if your app uses Bluetooth scan results to derive physical location. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
...
</manifest>
Uygulamanızın fiziksel konumu elde etmediğini kesin bir şekilde beyan edin
Uygulamanız fiziksel konumu belirlemek için Bluetooth tarama sonuçlarını kullanmıyorsa uygulamanızın fiziksel konumu belirlemek için Bluetooth izinlerini hiçbir zaman kullanmadığına dair güçlü bir beyanda bulunabilirsiniz. Bunun için aşağıdaki adımları uygulayın:
BLUETOOTH_SCAN
izin beyanınızaandroid:usesPermissionFlags
özelliğini ekleyin ve bu özelliğin değerinineverForLocation
olarak ayarlayın.Uygulamanız için konuma başka bir şekilde ihtiyaç yoksa
ACCESS_FINE_LOCATION
iznini uygulamanızın manifest dosyasından kaldırın.
Aşağıdaki kod snippet'i, uygulamanızın manifest dosyasını nasıl güncelleyeceğinizi gösterir:
<manifest>
<!-- Include "neverForLocation" only if you can strongly assert that
your app never derives physical location from Bluetooth scan results. -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
<!-- Not needed if you can strongly assert that your app never derives
physical location from Bluetooth scan results and doesn't need location
access for any other purpose. -->
<strike><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /></strike>
...
</manifest>
Android 11 veya önceki sürümleri hedefleme
Uygulamanız Android 11 (API düzeyi 30) veya önceki sürümleri hedefliyorsa aşağıdakileri beyan edin. uygulamanızın manifest dosyasındaki izinler:
BLUETOOTH
gereklidir herhangi bir Bluetooth klasik veya BDE iletişimini gerçekleştirmek; örneğin bir bağlantı, bağlantıyı kabul etme ve veri aktarımı.ACCESS_FINE_LOCATION
Android 11 ve önceki sürümlerde Bluetooth taraması kullanıcının konumu hakkında bilgi toplamak için belirtir.
Konum izinleri çalışma zamanı izinleri olduğundan, bu izinleri çalışma zamanında istemeniz gerekir beyan etmeniz gerekir.
Yerel Bluetooth cihazları keşfedin
Uygulamanızın cihaz bulmayı başlatmasını veya Bluetooth'u manipüle etmesini istiyorsanız
açıklamanız gerekiyorsa
BLUETOOTH_ADMIN
izni gerekir. Çoğu uygulama, bu izni yalnızca aşağıdakileri keşfetmek için ihtiyaç duyar:
yerel Bluetooth cihazları. Uygulama, kullanıcı isteği üzerine Bluetooth ayarlarını değiştiren bir "güç yöneticisi" olmadığı sürece bu izinle verilen diğer özellikleri kullanmayın. İzni uygulamanızın manifest dosyasında beyan edin. Örneğin,
örnek:
<manifest>
...
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
...
</manifest>
Uygulamanız bir hizmeti destekliyorsa ve Android 10 (API düzeyi 29) sürümünde çalışabiliyorsa veya
Android 11 için ayrıca
ACCESS_BACKGROUND_LOCATION
Bluetooth cihazları keşfetme izni. Bu konuda daha fazla bilgi için
arka plan.
Aşağıdaki kod snippet'inde, ACCESS_BACKGROUND_LOCATION
özelliğinin nasıl bildirileceği gösterilmektedir
izin:
<manifest>
...
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
...
</manifest>
Uygulama izinlerini bildirme hakkında daha fazla bilgi için <uses-permission>
referansına bakın.
Bluetooth özelliğinin kullanımını belirtme
Bluetooth, uygulamanızın önemli bir parçasıysa manifest dosyanıza işaret ekleyebilirsiniz.
dosyası oluşturabilirsiniz. İlgili içeriği oluşturmak için kullanılan
<uses-feature>
öğesi
uygulamanızın kullandığı donanım türünü ve
gereklidir.
Bu örnekte, uygulamasını indirin.
<uses-feature android:name="android.hardware.bluetooth" android:required="true"/>
Uygulamanız Bluetooth Düşük Enerji kullanıyorsa aşağıdakileri kullanabilirsiniz:
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
Bu özelliğin uygulamanız için gerekli olduğunu belirtirseniz Google Play Store, uygulamanızı bu özelliklere sahip olmayan cihazlardaki kullanıcılardan gizler. Bu nedenle, gerekli özelliği yalnızca uygulamanız bu özellik olmadan çalışamıyorsa true
olarak ayarlamanız gerekir.
Çalışma zamanında özellik kullanılabilirliğini kontrol etme
Uygulamanızı, Bluetooth klasik veya Bluetooth sürümünü desteklemeyen cihazlarda
BDE, uygulamanızın öğesine yine de <uses-feature>
öğesini eklemeniz
manifesto'yu oluşturun, ancak required="false"
olarak ayarlayın. Daha sonra çalışma zamanında
kullanılabilirlik durumunu öğrenmek için
PackageManager.hasSystemFeature()
:
Kotlin
// Check to see if the Bluetooth classic feature is available. val bluetoothAvailable = packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH) // Check to see if the BLE feature is available. val bluetoothLEAvailable = packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)
Java
// Use this check to determine whether Bluetooth classic is supported on the device. // Then you can selectively disable BLE-related features. boolean bluetoothAvailable = getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH); // Use this check to determine whether BLE is supported on the device. Then // you can selectively disable BLE-related features. boolean bluetoothLEAvailable = getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE);