{"id":13744175,"url":"https://github.com/myflashlab/PermissionCheck-ANE","last_synced_at":"2025-05-09T02:32:48.181Z","repository":{"id":82895693,"uuid":"60612950","full_name":"myflashlab/PermissionCheck-ANE","owner":"myflashlab","description":"Check and request for permissions in your Adobe Air app","archived":true,"fork":false,"pushed_at":"2020-08-06T11:12:27.000Z","size":5027,"stargazers_count":12,"open_issues_count":0,"forks_count":10,"subscribers_count":8,"default_branch":"master","last_synced_at":"2024-11-15T15:42:17.189Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"ActionScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/myflashlab.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-06-07T12:54:53.000Z","updated_at":"2023-01-28T00:43:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"b23c4be2-c678-4270-8b96-396587bf97ac","html_url":"https://github.com/myflashlab/PermissionCheck-ANE","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/myflashlab%2FPermissionCheck-ANE","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/myflashlab%2FPermissionCheck-ANE/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/myflashlab%2FPermissionCheck-ANE/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/myflashlab%2FPermissionCheck-ANE/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/myflashlab","download_url":"https://codeload.github.com/myflashlab/PermissionCheck-ANE/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253177849,"owners_count":21866407,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T05:01:04.558Z","updated_at":"2025-05-09T02:32:47.573Z","avatar_url":"https://github.com/myflashlab.png","language":"ActionScript","funding_links":[],"categories":["Native Extension","AIR Native Extensions"],"sub_categories":["System ANE"],"readme":"# Permission Check ANE for iOS/Android\nThis AIR Native Extensions lets you check the permission status of different iOS/Android sources like the camera, photos, contacts, calendar, reminders, location, mic and etc. This ANE also allows you to request for a permission if its status is still unknown (on iOS) or denied (on Android).\n\n**NOTE:** If you need other permissions, just leave us a message in the issues section and we will gladly add it to the currently supported permissions.\n\nHere are the list of permissions that this ANE currently supports:\n\n**on iOS:**\n\n* CAMERA\n* MIC\n* CONTACTS\n* CALENDAR\n* PHOTOS\n* REMINDER\n* LOCATION (when in app)\n* LOCATION (always)\n\n**on Android:**\n\n* CAMERA\n* MIC\n* CONTACTS\n* CALENDAR\n* PHONE\n* STORAGE\n* LOCATION\n* SENSORS\n* SMS\n\n\n[find the latest **asdoc** for this ANE here.](http://myflashlab.github.io/asdoc/com/myflashlab/air/extensions/nativePermissions/package-detail.html)\n\n# Air Usage\n```actionscript\nimport com.myflashlab.air.extensions.nativePermissions.PermissionCheck;\n\n// initialize the ane\nPermissionCheck.init();\n\n// check for a permission state\nvar permissionState:int = PermissionCheck.check(PermissionCheck.SOURCE_CAMERA);\n// PermissionCheck.SOURCE_CAMERA \u003e both platforms\n// PermissionCheck.SOURCE_MIC \u003e both platforms\n// PermissionCheck.SOURCE_CONTACTS \u003e both platforms\n// PermissionCheck.SOURCE_CALENDAR \u003e both platforms\n// PermissionCheck.SOURCE_PHOTOS \u003e iOS ONLY\n// PermissionCheck.SOURCE_REMINDER \u003e iOS ONLY\n// PermissionCheck.SOURCE_LOCATION_WHEN_IN_USE \u003e iOS ONLY\n// PermissionCheck.SOURCE_LOCATION_ALWAYS \u003e iOS ONLY\n// PermissionCheck.SOURCE_PHONE \u003e Android ONLY\n// PermissionCheck.SOURCE_STORAGE \u003e Android ONLY\n// PermissionCheck.SOURCE_LOCATION \u003e Android ONLY\n// PermissionCheck.SOURCE_SENSORS \u003e Android ONLY\n// PermissionCheck.SOURCE_SMS \u003e Android ONLY\n\n/*\n\tThe returned state will be one of these values:\n\tPermissionCheck.PERMISSION_UNKNOWN \u003e iOS ONLY when it's the first time that you are calling the feature.\n\tPermissionCheck.PERMISSION_DENIED\n\tPermissionCheck.PERMISSION_GRANTED\n*/\n\n// if the state is PERMISSION_UNKNOWN on iOS or PERMISSION_DENIED on Android, you can request for a permission like this:\nPermissionCheck.request(PermissionCheck.SOURCE_CAMERA, onRequestResult);\n\nprivate function onRequestResult($obj:Object):void\n{\n\ttrace(\"permission for \" + $obj.source + \": \" + $obj.state);\n}\n\n/*\n\tON iOS:\n\tWhen you request for a permission which is currently in UNKNOWN \n\tstate, a dialog window will open and asks for user's permission \n\tif the app should have access to the requested resource. No matter \n\twhat the decision of the user would be, you will never again be \n\table to request for that permission again! Don't ask me why, it's \n\thow iOS works :)\n\t\n\tSo, What would happen if a user has denied a request but later she \n\tchanges her mind? well, in that case, you should take the user to \n\tthe app's settings menu using ```PermissionCheck.openSettings();``` \n\twhere user can see the list of permissions she has granted to your \n\tapp.\n\t\n\tNOTICE: as soon as a user changes the state of a permission in the \n\tsettings menu, your app will be shut down by OS.\n\t\n\t--------------------------------------------------------------------\n\t\n\tON ANDROID:\n\tAs long as a feature permission is in DENIED state, you can request \n\tfor user's permission and a dialog will open by the ANE. Even the \n\tfirst time that you are asking for a permission, the state is DENIED.\n\t\n\tOptionally, you can call ```PermissionCheck.openSettings();``` to open \n\tthe app settings window so users can see the list of features that \n\tyour app has requested permissions for.\n*/\n```\n\n# Air .xml manifest\n```xml\n\u003c!--\nFOR Android:\n--\u003e\n\n\t\u003c!--\n\t\tAlthough Permissions are asked at runtime, you still need to mention them in your manifest.\n\t\t\n\t\tTo save your time, we have orgenized the permissions groups. Add them only if you are using that \n\t\tfeature in your app.\n\t--\u003e\n\t\t\n\t\u003c!-- CALENDAR GROUP --\u003e\n\t\u003cuses-permission android:name=\"android.permission.READ_CALENDAR\" /\u003e\n\t\u003cuses-permission android:name=\"android.permission.WRITE_CALENDAR\" /\u003e\n\t\t\n\t\u003c!-- CAMERA GROUP --\u003e\n\t\u003cuses-permission android:name=\"android.permission.CAMERA\" /\u003e\n\t\t\n\t\u003c!-- CONTACTS GROUP --\u003e\n\t\u003cuses-permission android:name=\"android.permission.READ_CONTACTS\" /\u003e\n\t\u003cuses-permission android:name=\"android.permission.WRITE_CONTACTS\" /\u003e\n\t\u003cuses-permission android:name=\"android.permission.GET_ACCOUNTS\" /\u003e\n\t\t\n\t\u003c!-- LOCATION GROUP --\u003e\n\t\u003cuses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" /\u003e\n\t\u003cuses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" /\u003e\n\t\t\n\t\u003c!-- MICROPHONE GROUP --\u003e\n\t\u003cuses-permission android:name=\"android.permission.RECORD_AUDIO\" /\u003e\n\t\n\t\u003c!-- PHONE GROUP --\u003e\n\t\u003cuses-permission android:name=\"android.permission.PROCESS_OUTGOING_CALLS\" /\u003e\n\t\u003cuses-permission android:name=\"android.permission.WRITE_CALL_LOG\" /\u003e\n\t\u003cuses-permission android:name=\"android.permission.READ_CALL_LOG\" /\u003e\n\t\u003cuses-permission android:name=\"android.permission.CALL_PHONE\" /\u003e\n\t\u003cuses-permission android:name=\"android.permission.READ_PHONE_STATE\" /\u003e\n\t\u003cuses-permission android:name=\"android.permission.USE_SIP\" /\u003e\n\t\u003cuses-permission android:name=\"com.android.voicemail.permission.ADD_VOICEMAIL\" /\u003e\n\t\t\n\t\u003c!-- SENSORS GROUP --\u003e\n\t\u003cuses-permission android:name=\"android.permission.BODY_SENSORS\" /\u003e\n\t\t\n\t\u003c!-- SMS GROUP --\u003e\n\t\u003cuses-permission android:name=\"android.permission.RECEIVE_MMS\" /\u003e\n\t\u003cuses-permission android:name=\"android.permission.RECEIVE_WAP_PUSH\" /\u003e\n\t\u003cuses-permission android:name=\"android.permission.READ_SMS\" /\u003e\n\t\u003cuses-permission android:name=\"android.permission.RECEIVE_SMS\" /\u003e\n\t\u003cuses-permission android:name=\"android.permission.SEND_SMS\" /\u003e\n\t\t\n\t\u003c!-- STORAGE GROUP --\u003e\n\t\u003cuses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" /\u003e\n\t\u003cuses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" /\u003e\n\n\n\n\n\t\n\t\n\t\n\n\n\u003c!--\nFOR iOS:\n--\u003e\n\t\u003cInfoAdditions\u003e\n\t\n\t\t\u003c!--iOS 10.0 or higher can support this ANE--\u003e\n\t\t\u003ckey\u003eMinimumOSVersion\u003c/key\u003e\n\t\t\u003cstring\u003e10.0\u003c/string\u003e\n\t\t\n\t\t\u003c!--\n\t\t\tIn iOS 10+ submissions require you to add the 'purpose string' to your app \n\t\t\twhen accessing a user's private data such as Camera or Photos. For information \n\t\t\tabout providing keys in your app descriptor file, see https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html\n\t\t\t\n\t\t\tTo save your time, we have added the required key/values below for your reference:\n\t\t\t\n\t\t\tNOTE: Add them ALL even if you are not using that feature in your app. iOS review\n\t\t\tprocess will notice that the native code is there and if you're not specifying the\n\t\t\t\u003ckey\u003e purpose in your manifest, they will reject your app. I know, seems silly but\n\t\t\tthat's how it works for now with iOS submissions. If in future, things are changed,\n\t\t\twe will update you.\n\t\t--\u003e\n\t\t\n\t\t\u003c!-- Camera --\u003e\n\t\t\u003ckey\u003eNSCameraUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e\n\t\t\n\t\t\u003c!-- Mic --\u003e\n\t\t\u003ckey\u003eNSMicrophoneUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e\n\t\t\n\t\t\u003c!-- Contacts --\u003e\n\t\t\u003ckey\u003eNSContactsUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e\n\t\t\n\t\t\u003c!-- Calender --\u003e\n\t\t\u003ckey\u003eNSCalendarsUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e\n\t\t\n\t\t\u003c!-- Photos --\u003e\n\t\t\u003ckey\u003eNSPhotoLibraryUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e\n\t\t\n\t\t\u003c!-- Reminder --\u003e\n\t\t\u003ckey\u003eNSRemindersUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e\n\t\t\n\t\t\u003c!-- Location when in use --\u003e\n\t\t\u003ckey\u003eNSLocationWhenInUseUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e\n\t\t\n\t\t\u003c!-- Location always --\u003e\n\t\t\u003ckey\u003eNSLocationAlwaysUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e\n\t\t\u003ckey\u003eNSLocationAlwaysAndWhenInUseUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e\n\t\t\n\t\t\u003c!-- Motion --\u003e\n\t\t\u003ckey\u003eNSMotionUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e\n\t\t\n\t\t\u003c!-- Siri (Coming Soon) --\u003e\n\t\t\u003c!--\u003ckey\u003eNSSiriUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e--\u003e\n\t\t\n\t\t\u003c!-- Speech Recognition (Coming Soon) --\u003e\n\t\t\u003c!--\u003ckey\u003eNSSpeechRecognitionUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e--\u003e\n\t\t\n\t\t\u003c!-- Home Kit (Coming Soon) --\u003e\n\t\t\u003c!--\u003ckey\u003eNSHomeKitUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e--\u003e\n\t\t\n\t\t\u003c!-- Health Update (Coming Soon) --\u003e\n\t\t\u003c!--\u003ckey\u003eNSHealthUpdateUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e--\u003e\n\t\t\n\t\t\u003c!-- Health Share (Coming Soon) --\u003e\n\t\t\u003c!--\u003ckey\u003eNSHealthShareUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e--\u003e\n\t\t\n\t\t\u003c!-- Bluetooth (Coming Soon) --\u003e\n\t\t\u003c!--\u003ckey\u003eNSBluetoothPeripheralUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e--\u003e\n\t\t\n\t\t\u003c!-- Apple Music (Coming Soon) --\u003e\n\t\t\u003c!--\u003ckey\u003eNSAppleMusicUsageDescription\u003c/key\u003e\n\t\t\u003cstring\u003eMy description about why I need this feature in my app\u003c/string\u003e--\u003e\n\t\n\t\u003c/InfoAdditions\u003e\n\t\n\t\n\t\n\u003c!--\nEmbedding the ANE:\n--\u003e\n  \u003cextensions\u003e\n\t\n\t\u003cextensionID\u003ecom.myflashlab.air.extensions.permissionCheck\u003c/extensionID\u003e\n\t\n\t\u003c!-- download the dependency ANEs from https://github.com/myflashlab/common-dependencies-ANE --\u003e\n\t\u003cextensionID\u003ecom.myflashlab.air.extensions.dependency.overrideAir\u003c/extensionID\u003e\n\t\u003cextensionID\u003ecom.myflashlab.air.extensions.dependency.androidx.core\u003c/extensionID\u003e\n\t\n  \u003c/extensions\u003e\n--\u003e\n```\n\n# Requirements \n1. iOS 10.0+\n2. AirSDK 33+\n3. Android 19+\n4. The following dependencies\n\t* ```\u003cextensionID\u003ecom.myflashlab.air.extensions.dependency.overrideAir\u003c/extensionID\u003e```\n\t* ```\u003cextensionID\u003ecom.myflashlab.air.extensions.dependency.androidx.core\u003c/extensionID\u003e```\n\n# Commercial Version\nhttps://www.myflashlabs.com/product/native-access-permission-check-settings-menu-air-native-extension/\n\n[![Permission Check ANE](https://www.myflashlabs.com/wp-content/uploads/2016/06/product_adobe-air-ane-permission-check-2018-595x738.jpg)](https://www.myflashlabs.com/product/native-access-permission-check-settings-menu-air-native-extension/)\n\n# Tutorials\n[How to embed ANEs into **FlashBuilder**, **FlashCC** and **FlashDevelop**](https://www.youtube.com/watch?v=Oubsb_3F3ec\u0026list=PL_mmSjScdnxnSDTMYb1iDX4LemhIJrt1O)  \n[Understanding How Permissions Work before the release of AIR 24](http://www.myflashlabs.com/understanding-android-ios-permissions-in-adobe-air-apps/)  \n[How to work with Permissions after the release of AIR SDK 24](http://www.myflashlabs.com/adobe-air-app-permissions-android-ios/)\n\n# Premium Support #\n[![Premium Support package](https://www.myflashlabs.com/wp-content/uploads/2016/06/professional-support.jpg)](https://www.myflashlabs.com/product/myflashlabs-support/)\nIf you are an [active MyFlashLabs club member](https://www.myflashlabs.com/product/myflashlabs-club-membership/), you will have access to our private and secure support ticket system for all our ANEs. Even if you are not a member, you can still receive premium help if you purchase the [premium support package](https://www.myflashlabs.com/product/myflashlabs-support/).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmyflashlab%2FPermissionCheck-ANE","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmyflashlab%2FPermissionCheck-ANE","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmyflashlab%2FPermissionCheck-ANE/lists"}