Outils pour utilisateurs

Outils du site


lang:android:permission

Ceci est une ancienne révision du document !


Demande d'accès explicites pour permissions multiples

private ActivityResultLauncher<String[]> requestPermissionLauncher = registerForActivityResult(
  new ActivityResultContracts.RequestMultiplePermissions(),
  isGranted -> {
    if (!isGranted.containsValue(false)) {
      // Tous les accès sont bons.
    }
  }
);
 
String[] ask_permission = {Manifest.permission.WRITE_EXTERNAL_STORAGE,
  Manifest.permission.READ_EXTERNAL_STORAGE};
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
  ask_permission = Arrays.copyOf(ask_permission, ask_permission.length+1);
  ask_permission[ask_permission.length-1] = Manifest.permission.MANAGE_EXTERNAL_STORAGE;
}
requestPermissionLauncher.launch(ask_permission);

Requesting runtime permissions using new ActivityResult API Archive du 06/07/2020 le 26/09/2022

Demande d'accès sur événements

Avec quelques spécificités sur l'USB.

  • Code Kotlin
private lateinit var mPermissionIntent: PendingIntent
private lateinit var mUsbManager: UsbManager
 
private val ACTION_USB_PERMISSION = "com.class.name.USB_PERMISSION"
private val mUsbReceiver: BroadcastReceiver = object : BroadcastReceiver() {
  override fun onReceive(context: Context, intent: Intent) {
    val device: UsbDevice? = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE)
    if (device == null) {
      return
    }
 
    when (intent.action) {
      ACTION_USB_PERMISSION -> {
        synchronized(this) {
          if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
          } else {
            // Denied
          }
        }
      }
      UsbManager.ACTION_USB_DEVICE_ATTACHED -> {
        if (!mUsbManager.hasPermission(device)) {
          mUsbManager.requestPermission(device, mPermissionIntent)
        } else {
          // Denied
        }
      }
      UsbManager.ACTION_USB_DEVICE_DETACHED -> {
        // Detached
      }
    }
  }
}
 
override fun onCreate(savedInstanceState: Bundle?) {
  mUsbManager = getSystemService(Context.USB_SERVICE) as UsbManager
 
  mPermissionIntent =
    PendingIntent.getBroadcast(this, 0, Intent(ACTION_USB_PERMISSION), 0);
  val filter = IntentFilter()
  filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED)
  filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED)
  filter.addAction(ACTION_USB_PERMISSION)
  registerReceiver(mUsbReceiver, filter)
}
  • app\src\main\AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.androidusbhost"
  android:versionCode="1"
  android:versionName="1.0" >
  <application
    <activity
      <intent-filter>
        <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
      </intent-filter>
      <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
        android:resource="@xml/device_filter" />
      <intent-filter>
        <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
      </intent-filter>
    </activity>
  </application>
</manifest>
  • Filtrer les devices USB dans app\src\main\res\xml\device_filter.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Accept all device VID/PID combinations -->
    <usb-device />
</resources>
lang/android/permission.1664178266.txt.gz · Dernière modification : de root