Android Permissions API

Android has an interesting way of handling permissions. You first have to declare the permission in the AndroidManifest.xml file, and then at runtime some permissions need to be 'requested' which gives the user and opportunity to deny that permission after your app is installed.

It was not always this way however. Before Android 6 you only had to declare the permission in the manifest (and the runtime request api was not available).

Fuse unifies these two different declarations to hopefully make android's approach slightly easier to work with.

Let's look and an example and then we will break it down:

    public void TakePicture(object a1, EventArgs a2)
    {
        var permissionPromise = Permissions.Request(Permissions.Android.CAMERA); // [0]
        permissionPromise.Then(OnPermitted, OnRejected); // [1]
    }

    void OnPermitted(PlatformPermission permission)
    {
        debug_log "Woo, we can take the picture now";
    }

    void OnRejected(Exception e)
    {
        debug_log "Blast: " + e.Message;
    }

[0] - Here we request the permission by calling the Request method and passing in the permission we want to be granted. Simply be referencing that permission Fuse will add it to your AndroidManifest.xml file.

[1] - We now specify which method to call if the permission is granted or if the permission is rejected.

And that's all there is to it!

What happens on older Android versions?

If you are on and older version of Android (from before the runtime permission request API) the request will always succeed.

Can I request multiple permissions at once?

Yes! Just pass an array of PlatformPermission objects to the Request method and make sure your OnPermitted method also takes an array of PlatformPermission objects.

What permissions are requestable by default?

  • ACCESS_CHECKIN_PROPERTIES
  • ACCESS_COARSE_LOCATION
  • ACCESS_FINE_LOCATION
  • ACCESS_LOCATION_EXTRA_COMMANDS
  • ACCESS_MOCK_LOCATION
  • ACCESS_NETWORK_STATE
  • ACCESS_SURFACE_FLINGER
  • ACCESS_WIFI_STATE
  • ACCOUNT_MANAGER
  • ADD_VOICEMAIL
  • AUTHENTICATE_ACCOUNTS
  • BATTERY_STATS
  • BIND_ACCESSIBILITY_SERVICE
  • BIND_APPWIDGET
  • BIND_DEVICE_ADMIN
  • BIND_DREAM_SERVICE
  • BIND_INPUT_METHOD
  • BIND_NFC_SERVICE
  • BIND_NOTIFICATION_LISTENER_SERVICE
  • BIND_PRINT_SERVICE
  • BIND_REMOTEVIEWS
  • BIND_TEXT_SERVICE
  • BIND_TV_INPUT
  • BIND_VOICE_INTERACTION
  • BIND_VPN_SERVICE
  • BIND_WALLPAPER
  • BLUETOOTH
  • BLUETOOTH_ADMIN
  • BLUETOOTH_PRIVILEGED
  • BODY_SENSORS
  • BRICK
  • BROADCAST_PACKAGE_REMOVED
  • BROADCAST_SMS
  • BROADCAST_STICKY
  • BROADCAST_WAP_PUSH
  • CALL_PHONE
  • CALL_PRIVILEGED
  • CAMERA
  • CAPTURE_AUDIO_OUTPUT
  • CAPTURE_SECURE_VIDEO_OUTPUT
  • CAPTURE_VIDEO_OUTPUT
  • CHANGE_COMPONENT_ENABLED_STATE
  • CHANGE_CONFIGURATION
  • CHANGE_NETWORK_STATE
  • CHANGE_WIFI_MULTICAST_STATE
  • CHANGE_WIFI_STATE
  • CLEAR_APP_CACHE
  • CLEAR_APP_USER_DATA
  • CONTROL_LOCATION_UPDATES
  • DELETE_CACHE_FILES
  • DELETE_PACKAGES
  • DEVICE_POWER
  • DIAGNOSTIC
  • DISABLE_KEYGUARD
  • DUMP
  • EXPAND_STATUS_BAR
  • FACTORY_TEST
  • FLASHLIGHT
  • FORCE_BACK
  • GET_ACCOUNTS
  • GET_PACKAGE_SIZE
  • GET_TASKS
  • GET_TOP_ACTIVITY_INFO
  • GLOBAL_SEARCH
  • HARDWARE_TEST
  • INJECT_EVENTS
  • INSTALL_LOCATION_PROVIDER
  • INSTALL_PACKAGES
  • INSTALL_SHORTCUT
  • INTERNAL_SYSTEM_WINDOW
  • INTERNET
  • KILL_BACKGROUND_PROCESSES
  • LOCATION_HARDWARE
  • MANAGE_ACCOUNTS
  • MANAGE_APP_TOKENS
  • MANAGE_DOCUMENTS
  • MASTER_CLEAR
  • MEDIA_CONTENT_CONTROL
  • MODIFY_AUDIO_SETTINGS
  • MODIFY_PHONE_STATE
  • MOUNT_FORMAT_FILESYSTEMS
  • MOUNT_UNMOUNT_FILESYSTEMS
  • NFC
  • PERSISTENT_ACTIVITY
  • PROCESS_OUTGOING_CALLS
  • READ_CALENDAR
  • READ_CALL_LOG
  • READ_CONTACTS
  • READ_EXTERNAL_STORAGE
  • READ_FRAME_BUFFER
  • READ_HISTORY_BOOKMARKS
  • READ_INPUT_STATE
  • READ_LOGS
  • READ_PHONE_STATE
  • READ_PROFILE
  • READ_SMS
  • READ_SOCIAL_STREAM
  • READ_SYNC_SETTINGS
  • READ_SYNC_STATS
  • READ_USER_DICTIONARY
  • READ_VOICEMAIL
  • REBOOT
  • RECEIVE_BOOT_COMPLETED
  • RECEIVE_MMS
  • RECEIVE_SMS
  • RECEIVE_WAP_PUSH
  • RECORD_AUDIO
  • REORDER_TASKS
  • RESTART_PACKAGES
  • SEND_RESPOND_VIA_MESSAGE
  • SEND_SMS
  • SET_ACTIVITY_WATCHER
  • SET_ALARM
  • SET_ALWAYS_FINISH
  • SET_ANIMATION_SCALE
  • SET_DEBUG_APP
  • SET_ORIENTATION
  • SET_POINTER_SPEED
  • SET_PREFERRED_APPLICATIONS
  • SET_PROCESS_LIMIT
  • SET_TIME
  • SET_TIME_ZONE
  • SET_WALLPAPER
  • SET_WALLPAPER_HINTS
  • SIGNAL_PERSISTENT_PROCESSES
  • STATUS_BAR
  • SUBSCRIBED_FEEDS_READ
  • SUBSCRIBED_FEEDS_WRITE
  • SYSTEM_ALERT_WINDOW
  • TRANSMIT_IR
  • UNINSTALL_SHORTCUT
  • UPDATE_DEVICE_STATS
  • USE_CREDENTIALS
  • USE_SIP
  • VIBRATE
  • WAKE_LOCK
  • WRITE_APN_SETTINGS
  • WRITE_CALENDAR
  • WRITE_CALL_LOG
  • WRITE_CONTACTS
  • WRITE_EXTERNAL_STORAGE
  • WRITE_GSERVICES
  • WRITE_HISTORY_BOOKMARKS
  • WRITE_PROFILE
  • WRITE_SECURE_SETTINGS
  • WRITE_SETTINGS
  • WRITE_SMS
  • WRITE_SOCIAL_STREAM
  • WRITE_SYNC_SETTINGS
  • WRITE_USER_DICTIONARY
  • WRITE_VOICEMAIL