{"id":13565175,"url":"https://github.com/ZebraDevs/MX-EMDK-Android-Java-CriticalPermissionsHelper","last_synced_at":"2025-04-03T22:30:49.936Z","repository":{"id":115337915,"uuid":"566277265","full_name":"ZebraDevs/MX-EMDK-Android-Java-CriticalPermissionsHelper","owner":"ZebraDevs","description":"NEW !!! Grant ALL DANGEROUS PERMISSIONS ON MX 13.1 !!!!!              A simple wrapper to easilly grant critical permission to an application on Zebra Devices","archived":false,"fork":true,"pushed_at":"2024-09-19T14:40:06.000Z","size":104,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-11-04T18:46:24.089Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"ltrudu/CriticalPermissionsHelper","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ZebraDevs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-11-15T10:36:31.000Z","updated_at":"2024-10-28T17:30:50.000Z","dependencies_parsed_at":"2023-10-11T11:22:35.868Z","dependency_job_id":null,"html_url":"https://github.com/ZebraDevs/MX-EMDK-Android-Java-CriticalPermissionsHelper","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/ZebraDevs%2FMX-EMDK-Android-Java-CriticalPermissionsHelper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZebraDevs%2FMX-EMDK-Android-Java-CriticalPermissionsHelper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZebraDevs%2FMX-EMDK-Android-Java-CriticalPermissionsHelper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZebraDevs%2FMX-EMDK-Android-Java-CriticalPermissionsHelper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZebraDevs","download_url":"https://codeload.github.com/ZebraDevs/MX-EMDK-Android-Java-CriticalPermissionsHelper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247089875,"owners_count":20881867,"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-01T13:01:42.040Z","updated_at":"2025-04-03T22:30:47.142Z","avatar_url":"https://github.com/ZebraDevs.png","language":"Java","funding_links":[],"categories":["Java"],"sub_categories":[],"readme":"*Please be aware that this library / application / sample is provided as a community project without any guarantee of support*\n=========================================================\n# CriticalPermissionsHelper\n\n[![](https://jitpack.io/v/ltrudu/CriticalPermissionsHelper.svg)](https://jitpack.io/#ltrudu/CriticalPermissionsHelper)\n[![](https://jitpack.io/v/ltrudu/CriticalPermissionsHelper/month.svg)](https://jitpack.io/#ltrudu/CriticalPermissionsHelper)\n\n\n## Easy grant critical permissions to your Zebra's device\n\nForget about AccessMgr, StageNow, EMDK, certificates, application signature... complexity....\n\nJust grant some critical permissions on your Zebra device in one method call (see at the end of this document).\n\nIncludes: ACCESS_NOTIFICATIONS, PACKAGE_USAGE_STATS, SYSTEM_ALERT_WINDOW, BATTERY_STATS, MANAGE_EXTERNAL_STORAGE, GET_APP_OPS_STATS, ALL_DANGEROUS_PERMISSIONS\n\nHave fun with Zebra's devices :)\n\n## Sample Repository\nhttps://github.com/ltrudu/CriticalPermissionsHelper-Sample\n\n\n## Description\nA wrapper to easily grant critical permissions to your application running on Zebra's Android devices with Android \u003e= A11\n\nAvailable permissions are:\n\n```txt\n#1. Access Notifications:\t\nControls permission to access Notifications on the device.\t\t\t\n\n#2. Package Usage Stats:\t\nControls permission to access app usage statistics for the device.\t\t\t\n\n#3. System Alert Window:\t\nControls permission to use the System Alert Window, which allows one app to draw its window(s) over another.\t\t\t\n\n#4. Get AppOps Stats:\t\nControls permission to access app operations statistics, used to determine the resources being used by apps on the device.\n\n#5. Battery Stats:\t\nControls permission to access battery statistics for the device.\t\t\t\n\n#6. Manage External Storage:\t\nControls management of USB and/or SD card storage media attached to the device.\t\n\n#7. All Dangerous Permissions (MX \u003e= 13.1, StageNow \u003e= 5.11.0)\nGrants all permissions that requires runtime permission model\nTo know which permissions are listed as Dangerous, execute the following ADB command:\nadb shell pm list permissions -g -d\n```\n\nThis wrapper will use the EMDK with MX's AccessMgr feature to grant, deny or verify (WIP) critical permissions.\n\n## Implementation\nTo use this helper on Zebra Android devices running Android 10 or higher, first declare a new permission in your AndroidManifest.xml\nThe EMDK permission is compulsary, the others are depending on your needs.\n\n```xml\n    \u003cuses-permission android:name=\"com.symbol.emdk.permission.EMDK\" /\u003e\n\n    \u003cuses-permission android:name=\"android.permission.ACCESS_NOTIFICATIONS\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.PACKAGE_USAGE_STATS\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.BATTERY_STATS\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.GET_APP_OPS_STATS\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n\t\t\n\t\u003c!-- Or any dangerous permission, for example: --\u003e\n   \u003cuses-permission android:name=\"permission:android.permission.ACCESS_FINE_LOCATION\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n   \u003cuses-permission android:name=\"permission:android.permission.BLUETOOTH_CONNECT\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e   \n\t\t\u003cuses-permission android:name=\"  permission:android.permission.BLUETOOTH_SCAN\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n\t  \n```\n\nSample AdroidManifest.xml:\n```xml\n?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003cmanifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    package=\"com.zebra.criticalpermissionshelpersample\"\u003e\n    \u003c!--\u003e TODO: Add these permissions to your manifest \u003c/--\u003e\n    \u003cuses-permission android:name=\"com.symbol.emdk.permission.EMDK\" /\u003e\n\n    \u003cuses-permission android:name=\"android.permission.ACCESS_NOTIFICATIONS\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.PACKAGE_USAGE_STATS\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.BATTERY_STATS\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.GET_APP_OPS_STATS\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n\t\u003cuses-permission android:name=\"permission:android.permission.ACCESS_FINE_LOCATION\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n\t\u003cuses-permission android:name=\"permission:android.permission.BLUETOOTH_CONNECT\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e   \n\t\u003cuses-permission android:name=\"  permission:android.permission.BLUETOOTH_SCAN\"\n        tools:ignore=\"ProtectedPermissions\" /\u003e\n\n    \u003capplication\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:roundIcon=\"@mipmap/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/AppTheme\"\u003e\n        \u003c!--\u003e TODO: Add uses-library com.symbol.emdk to your manifest \u003c/--\u003e\n        \u003cuses-library android:name=\"com.symbol.emdk\" /\u003e\n        \u003cactivity android:name=\"com.zebra.criticalpermissionshelpersample.MainActivity\"\n            android:exported=\"true\"\u003e\n            \u003cintent-filter\u003e\n                \u003caction android:name=\"android.intent.action.MAIN\" /\u003e\n\n                \u003ccategory android:name=\"android.intent.category.LAUNCHER\" /\u003e\n            \u003c/intent-filter\u003e\n        \u003c/activity\u003e\n    \u003c/application\u003e\n\n\u003c/manifest\u003e\n```\nUpdate your project build.graddle file to add jitpack repository\n```text\n        maven { url 'https://jitpack.io' }        \n```\nSample project build.gradle\n```text\n        buildscript {\n    repositories {\n        google()\n        jcenter()\n        maven { url 'https://jitpack.io' }\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:7.2.1'\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        jcenter()\n        google()\n        maven { url 'https://jitpack.io' }\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}       \n```\n\nFinally, add CriticalPermissionsHelper dependency to your application build.graddle file:\n```text\n        implementation 'com.github.ltrudu:CriticalPermissionsHelper:+'        \n```\n\nSample application build.graddle:\n```text\ndependencies {\n    implementation fileTree(dir: 'libs', include: ['*.jar'])\n    implementation 'com.android.support:appcompat-v7:28.0.0'\n    testImplementation 'junit:junit:4.13'\n    androidTestImplementation 'com.android.support.test:runner:1.0.2'\n    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'\n    implementation 'com.github.ltrudu:CriticalPermissionsHelper:+'\n}\n```\n\nNow you can use the following snippet codes to grant permissions.\n\nThe type of permissions you can grant:\n```java\nEPermissionType.ACCESS_NOTIFICATIONS\nEPermissionType.PACKAGE_USAGE_STATS\nEPermissionType.SYSTEM_ALERT_WINDOW\nEPermissionType.GET_APP_OPS_STATS\nEPermissionType.BATTERY_STATS\nEPermissionType.MANAGE_EXTERNAL_STORAGE\nEPermissionType.ALL_DANGEROUS_PERMISSIONS\n```\n\nSnippet code to grant a permission:\n```java\nprivate void enablePermission(final Context aContext, final EPermissionType aPermissionType)\n{\n    // Enable permission\n    CriticalPermissionsHelper.grantPermission(aContext, aPermissionType, new IResultCallbacks() {\n        @Override\n        public void onSuccess(String message, String resultXML) {\n            Log.d(TAG, aPermissionType.toString() + \" granted with success.\");\n        }\n\n        @Override\n        public void onError(String message, String resultXML) {\n            Log.d(TAG, \"Error granting \" + aPermissionType.toString() + \" permission.\\n\" + message);\n        }\n\n        @Override\n        public void onDebugStatus(String message) {\n            Log.d(TAG, \"Debug Grant Permission \" + aPermissionType.toString() + \": \" + message);\n        }\n    });\n  }\n```\n\nSnippet code to disable a permission:\n```java\nprivate void disablePermission(final Context aContext, final EPermissionType aPermissionType)\n{\n    // Enable permission\n    CriticalPermissionsHelper.denyPermission(aContext, aPermissionType, new IResultCallbacks() {\n        @Override\n        public void onSuccess(String message, String resultXML) {\n            Log.d(TAG, aPermissionType.toString() + \" granted with success.\");\n        }\n\n        @Override\n        public void onError(String message, String resultXML) {\n            Log.d(TAG, \"Error granting \" + aPermissionType.toString() + \" permission.\\n\" + message);\n        }\n\n        @Override\n        public void onDebugStatus(String message) {\n            Log.d(TAG, \"Debug Grant Permission \" + aPermissionType.toString() + \": \" + message);\n        }\n    });\n  }\n```\n\nThe verifyPermission method is a work in progress.\nCheck the sample for more information.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FZebraDevs%2FMX-EMDK-Android-Java-CriticalPermissionsHelper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FZebraDevs%2FMX-EMDK-Android-Java-CriticalPermissionsHelper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FZebraDevs%2FMX-EMDK-Android-Java-CriticalPermissionsHelper/lists"}