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 (BDE) desteği gerekip gerekmediğini belirtmeniz gerekir. Uygulamanız Bluetooth klasik veya BDE gerektirmiyorsa ancak yine de bu teknolojilerden yararlanabiliyorsa çalışma zamanında kullanılabilirliği kontrol edebilirsiniz.
İzinleri bildirme
Uygulamanızda beyan ettiğiniz izin grubu, uygulamanızın hedef SDK sürümüne bağlıdır.
Android 12 veya sonraki sürümleri hedefleme
Not: Companion Device Manager (CDM), bu bölümde açıklanan izinlerle karşılaştırıldığında, Android 8.0 (API düzeyi 26) ve sonraki sürümlerde tamamlayıcı cihazlara bağlanma konusunda daha kolay bir yöntem sunar. CDM sistemi, uygulamanız adına bir eşleme kullanıcı arayüzü sağlar ve konum izinleri gerektirmez.
Eşleme ve bağlanma 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 BDE çevre birimleri gibi Bluetooth cihazları arıyorsa
BLUETOOTH_SCAN
iznini beyan edin. - Uygulamanız geçerli cihazı diğer Bluetooth cihazlara bulunabilir hale getiriyorsa
BLUETOOTH_ADVERTISE
iznini beyan edin. - Uygulamanız zaten eşlenmiş Bluetooth cihazlarla iletişim kuruyorsa
BLUETOOTH_CONNECT
iznini beyan edin. - Eski Bluetooth ile ilgili izin beyanlarınız için
android:maxSdkVersion
değerini30
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 konum elde etmek için Bluetooth tarama sonuçlarını kullanıyorsa
ACCESS_FINE_LOCATION
iznini beyan edin. Aksi takdirde, uygulamanızın fiziksel konum elde etmediğini iddia edebilirsiniz.
BLUETOOTH_ADVERTISE
, BLUETOOTH_CONNECT
ve BLUETOOTH_SCAN
izinleri çalışma zamanı izinleridir.
Bu nedenle, Bluetooth cihazları arayabilmek, bir cihazı diğer cihazlar tarafından bulunabilir hale getirmek veya zaten eşlenmiş Bluetooth cihazlarla iletişim kurmak için uygulamanızda açıkça kullanıcı onayı talep etmeniz gerekir. Uygulamanız bu izinlerden en az birini istediğinde, sistem kullanıcıdan uygulamanızın Şekil 1'de gösterildiği gibi Yakındaki cihazlar'a erişmesine izin vermesini ister.
Aşağıdaki kod snippet'i, uygulamanızın Android 12 veya sonraki bir sürümünü hedefliyorsa 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 elde etmediğini iddia etmek
Uygulamanız fiziksel konum elde etmek için Bluetooth tarama sonuçlarını kullanmıyorsa uygulamanızın fiziksel konum belirlemek için Bluetooth izinlerini hiçbir zaman kullanmadığına dair güçlü bir iddiada 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 konum bilgisi gerekli değilse uygulamanızın manifest dosyasından
ACCESS_FINE_LOCATION
iznini 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 uygulamanızın manifest dosyasında aşağıdaki izinleri beyan edin:
BLUETOOTH
, bağlantı isteğinde bulunma, bağlantıyı kabul etme ve veri aktarma gibi herhangi bir Bluetooth klasik veya BDE iletişimini gerçekleştirmek için gereklidir.ACCESS_FINE_LOCATION
gereklidir. Çünkü Android 11 ve önceki sürümlerde, kullanıcının konumu hakkında bilgi toplamak için Bluetooth taraması kullanılabilir.
Konum izinleri çalışma zamanı izinleri olduğundan, manifest dosyanızda beyan ederek bu izinleri çalışma zamanında istemeniz gerekir.
Yerel Bluetooth cihazları keşfedin
Uygulamanızın cihaz bulmayı başlatmasını veya Bluetooth ayarlarını manipüle etmesini istiyorsanız BLUETOOTH_ADMIN
iznini beyan etmeniz gerekir. Çoğu uygulama, bu izne yalnızca yerel Bluetooth cihazları keşfetmek için ihtiyaç duyar. Uygulama, kullanıcı isteği üzerine Bluetooth ayarlarını değiştiren bir "güç yöneticisi" olmadığı sürece bu iznin verdiği diğer özellikleri 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ği kullanımını belirtin
Bluetooth, uygulamanızın önemli bir parçasıysa manifest dosyanıza bu gerekliliği belirten işaretler ekleyebilirsiniz. <uses-feature>
öğesi, uygulamanızın kullandığı donanım türünü ve bunun gerekli olup olmadığını belirtmenize olanak tanır.
Bu örnekte, uygulamanız için Bluetooth klasik gerektiğini nasıl belirteceğiniz gösterilmektedir.
<uses-feature android:name="android.hardware.bluetooth" android:required="true"/>
Uygulamanızda Bluetooth Düşük Enerji kullanılıyorsa şunları kullanabilirsiniz:
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
Özelliğin uygulamanız için gerekli olduğunu söylerseniz Google Play Store, uygulamanızı bu özelliğe sahip olmayan cihazlardaki kullanıcılardan gizler. Bu nedenle, gerekli özelliği yalnızca uygulamanız bu özellik olmadan çalışamadığında true
olarak ayarlamalısınız.
Çalışma zamanında özellik kullanılabilirliğini kontrol etme
Uygulamanızın Bluetooth klasik veya BDE'yi desteklemeyen cihazlarda kullanılabilmesi için yine de uygulamanızın manifest dosyasına <uses-feature>
öğesini dahil etmeniz, 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);