Uygulamanızda Bluetooth özelliklerini kullanmak için çeşitli izinleri beyan etmeniz gerekir. Ayrıca uygulamanızın Bluetooth Klasik veya Bluetooth Düşük Enerji (BLE) için destek gerektirip gerektirmediğini belirtmeniz gerekir. Uygulamanız Bluetooth Klasik veya BLE gerektirmiyor ancak bu teknolojilerden yararlanabiliyorsa çalışma zamanında kullanılabilirliği kontrol edebilirsiniz.
İzinleri beyan etme
Uygulamanızda beyan ettiğiniz izinler, uygulamanızın hedef SDK sürümüne bağlıdır.
Android 12 veya sonraki sürümleri hedefleme
Not: Android 8.0 (API düzeyi 26) ve sonraki sürümlerde Yardımcı Cihaz Yöneticisi (CDM), bu bölümde açıklanan izinlere kıyasla yardımcı cihazlara bağlanmak için daha kolay bir yöntem sunar. CDM sistemi, uygulamanız adına bir eşleme kullanıcı arayüzü sağlar ve konum izni gerektirmez.
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 BLE çevre birimleri gibi Bluetooth cihazları arıyorsa
BLUETOOTH_SCANiznini beyan edin. - Uygulamanız mevcut cihazı diğer Bluetooth cihazları tarafından bulunabilir hale getiriyorsa
BLUETOOTH_ADVERTISEiznini beyan edin. - Uygulamanız eşlenmiş Bluetooth cihazlarıyla iletişim kuruyorsa
BLUETOOTH_CONNECTiznini beyan edin. - Eski Bluetooth ile ilgili izin beyanlarınız için
android:maxSdkVersiondeğerini 30 olarak ayarlayın. Bu uygulama uyumluluğu adımı, sistemin uygulamanıza yalnızca Android 12 veya sonraki sürümleri çalıştıran cihazlara yüklendiğinde ihtiyaç duyduğu Bluetooth izinlerini vermesine yardımcı olur. - Uygulamanız fiziksel konumu belirlemek için Bluetooth tarama sonuçlarını kullanıyorsa
ACCESS_FINE_LOCATIONiznini beyan edin. Aksi takdirde, uygulamanızın fiziksel konum bilgisi almadığını kesin bir dille belirtebilir veACCESS_FINE_LOCATIONizni içinandroid:maxSdkVersiondeğerini 30 olarak ayarlayabilirsiniz.
BLUETOOTH_ADVERTISE, BLUETOOTH_CONNECT ve BLUETOOTH_SCAN izinleri, çalışma zamanında istenen izinlerdir.
Bu nedenle, Bluetooth cihazları aramadan, bir cihazı diğer cihazlar tarafından bulunabilir hale getirmeden veya önceden eşlenmiş Bluetooth cihazlarıyla iletişim kurmadan önce uygulamanızda açıkça kullanıcı onayı istemeniz gerekir. Uygulamanız bu izinlerden en az birini istediğinde sistem, Şekil 1'de gösterildiği gibi kullanıcıdan uygulamanızın Yakındaki cihazlar'a erişmesine izin vermesini ister.
Aşağıdaki kod snippet'i, Android 12 veya sonraki sürümleri hedefleyen uygulamanızda Bluetooth ile ilgili izinleri nasıl beyan edeceğinizi gösterir:
<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 konum bilgisi almadığını kesin olarak belirtme
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ığını kesin bir şekilde beyan edebilirsiniz. Bunun için aşağıdaki adımları uygulayın:
BLUETOOTH_SCANizin beyanınızaandroid:usesPermissionFlagsözelliğini ekleyin ve bu özelliğin değerinineverForLocationolarak ayarlayın.Uygulamanızın başka bir nedenle konuma ihtiyacı yoksa
ACCESS_FINE_LOCATIONiznini 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" />
<!-- Set maxSdkVersion to 30 if you can strongly assert that, on
Android 12 and higher, your app never derives physical location from
Bluetooth scan results and doesn't need location access for any other
purpose. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
android:maxSdkVersion="30" />
...
</manifest>
Android 11 veya önceki sürümleri hedefleme
Uygulamanız Android 11 (API düzeyi 30) veya daha eski bir sürümü hedefliyorsa uygulamanızın manifest dosyasında aşağıdaki izinleri beyan edin:
- Bağlantı isteğinde bulunma, bağlantıyı kabul etme ve veri aktarma gibi Bluetooth Klasik veya BLE iletişimlerini gerçekleştirmek için
BLUETOOTHgereklidir. ACCESS_FINE_LOCATIONgereklidir. Android 11 ve önceki sürümlerde Bluetooth taraması, kullanıcının konumu hakkında bilgi toplamak için kullanılabilir.
Konum izinleri çalışma zamanında istenen izinler olduğundan, bunları manifest dosyanızda beyan etmenin yanı sıra çalışma zamanında da istemeniz gerekir.
Yerel Bluetooth cihazları keşfetme
Uygulamanızın cihaz keşfini başlatmasını veya Bluetooth ayarlarını değiştirmesini istiyorsanız BLUETOOTH_ADMIN iznini beyan etmeniz gerekir. Çoğu uygulama bu izne yalnızca yerel Bluetooth cihazlarını keşfedebilmek için ihtiyaç duyar. Uygulama, kullanıcı isteği üzerine Bluetooth ayarlarını değiştiren bir "güç yöneticisi" değilse bu iznin verdiği diğer yetenekleri kullanmayın. Uygulama manifest dosyanızda izni beyan edin. Örneğin:
<manifest>
...
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
...
</manifest>
Uygulamanız bir hizmeti destekliyorsa ve Android 10 (API düzeyi 29) veya Android 11'de çalışabiliyorsa Bluetooth cihazları keşfetmek için ACCESS_BACKGROUND_LOCATION iznini de beyan etmeniz gerekir. Bu şart hakkında daha fazla bilgi için Arka planda konuma erişme bölümüne bakın.
Aşağıdaki kod snippet'inde, ACCESS_BACKGROUND_LOCATION izninin nasıl beyan edileceği gösterilmektedir:
<manifest>
...
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
...
</manifest>
Uygulama izinlerini beyan etme hakkında daha fazla bilgi için <uses-permission> referansına bakın.
Bluetooth özelliğinin kullanımını belirtme
Bluetooth, uygulamanızın kritik bir parçasıysa manifest dosyanıza bu gereksinimi belirten işaretler ekleyebilirsiniz. <uses-feature> öğesi, uygulamanızın kullandığı donanım türünü ve gerekli olup olmadığını belirtmenize olanak tanır.
Bu örnekte, uygulamanız için Bluetooth Klasik'in gerekli olduğunu nasıl belirteceğiniz gösterilmektedir.
<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"/>
Ö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 özelliklerin kullanılabilirlik durumunu kontrol etme
Uygulamanızı Bluetooth Klasik veya BLE'yi desteklemeyen cihazlarda kullanılabilir hale getirmek için uygulamanızın manifest dosyasına <uses-feature> öğesini eklemeniz ancak required="false" olarak ayarlamanız gerekir. Ardından, çalışma zamanında PackageManager.hasSystemFeature() kullanarak özellik kullanılabilirliğini belirleyebilirsiniz:
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);