Bluetooth izinleri

Uygulamanızda Bluetooth özelliklerini kullanmak için birkaç beyanda bulunmanız gerekir. izinleriyle ilgili daha fazla bilgi edinin. Ayrıca, uygulamanız için bu gereksinimlerin desteği üzerinden iletebilirsiniz. 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 izinlere tabidir.

Bluetooth izinleri iletişim kutusu
Sistem izinleri iletişim kutusu uygulamanın yakındaki işletmeleri keşfetmesi, tanıtması ve onlara bağlanması için izin verme cihazlar.

Uygulamanız Android 12 (API düzeyi 31) veya sonraki bir sürümü hedefliyorsa aşağıdakileri beyan edin. uygulamanızın manifest dosyasındaki izinler:

  1. Uygulamanız Bluetooth'u arıyorsa cihazlar; örneğin BDE çevre birimleri için BLUETOOTH_SCAN izni gerekir.
  2. Uygulamanız, geçerli cihazı diğer Bluetooth cihazları tarafından bulunabilir duruma getirirse cihaz, şunu beyan etmek: BLUETOOTH_ADVERTISE izni gerekir.
  3. Uygulamanız zaten eşlenmiş Bluetooth ile iletişim kuruyorsa beyanda bulunun BLUETOOTH_CONNECT izni gerekir.
  4. 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.
  5. 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, DMAIC ve PDCA gibi fiziksel konum.

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 konum elde etmediğini iddia etmek

Uygulamanız fiziksel konum belirlemek için Bluetooth tarama sonuçlarını kullanmıyorsa uygulamanızın Bluetooth izinlerini hiçbir zaman kullanmadığına dair güçlü bir iddiada bulunabilir elde etmek için kullanılabilir. Bunun için aşağıdaki adımları uygulayın:

  1. BLUETOOTH_SCAN android:usesPermissionFlags özelliğini ekleyin izin beyanını girin ve bu özelliğin değerini neverForLocation olarak ayarlayın.

  2. Uygulamanız için konum bilgisi gerekli değilse Uygulamanızın manifest dosyasından ACCESS_FINE_LOCATION izni.

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.
ziyaret edin.

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ı. Bu Uygulama "güç yöneticisi" değilse izin Bluetooth ayarlarını değiştiren (kullanıcının isteği üzerine) Uygulama manifest dosyanızda izni 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>

<uses-permission> sayfasını inceleyin. başlıklı makaleyi inceleyin.

Bluetooth özelliği kullanımını belirtin

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ızda Bluetooth Düşük Enerji kullanılıyorsa şunları kullanabilirsiniz:

<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>

Bu özelliğin uygulamanız için gerekli olduğunu söylerseniz Google Play Store uygulamanızı bu özelliklere sahip olmayan cihazlardaki kullanıcılardan gizleyin. Bu nedenle, uygulamanız olmadan çalışamazsa yalnızca gerekli özelliği true olarak ayarlamalıdır gösterir.

Ç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);