{"id":4515,"date":"2018-12-13T21:36:59","date_gmt":"2018-12-13T21:36:59","guid":{"rendered":"http:\/\/www.deuzebranaweb.com.br\/?p=4515"},"modified":"2018-12-13T21:36:59","modified_gmt":"2018-12-13T21:36:59","slug":"sistema-de-permissoes-em-tempo-de-execucao-android-m","status":"publish","type":"post","link":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/2018\/12\/13\/sistema-de-permissoes-em-tempo-de-execucao-android-m\/","title":{"rendered":"Sistema de Permiss\u00f5es em Tempo de Execu\u00e7\u00e3o, Android M"},"content":{"rendered":"<p>O sistema de permiss\u00f5es do Android mant\u00e9m todo o sistema \/ framework consistente fazendo com que APPs que necessitem acesso a dados n\u00e3o produzidos por elas (dentro do sandbox dedicado a elas) ou a funcionalidades n\u00e3o dispon\u00edveis nelas\u00a0definam permiss\u00f5es para que esse consumo seja poss\u00edvel.\u00a0Dentre\u00a0os grupos de permiss\u00f5es, dois grupos s\u00e3o mais comuns: Grupo de Permiss\u00f5es Normais e Grupo de Permiss\u00f5es perigosas.<\/p>\n<p>Com o release do Android\u00a0Marshmallow\u00a0o sistema de permiss\u00f5es no Android que tinha o formato de apresentar todos os grupos de permiss\u00f5es necess\u00e1rios logo no momento de instala\u00e7\u00e3o da APP (direto na PlayStore):<\/p>\n<p>&nbsp;<\/p>\n<p>Al\u00e9m de acelerar o processo de instala\u00e7\u00e3o da APP por parte do user no device dele, esse novo modelo de permiss\u00f5es que funciona somente quando a vers\u00e3o do Android \u00e9 igual ou superior a 6 (Marshmallow) e ao mesmo tempo o targetSdkVersion da APP \u00e9 igual ou superior a API 23 traz tamb\u00e9m um esfor\u00e7o extra por parte do developer Android que ter\u00e1 de solicitar cada permiss\u00e3o necess\u00e1ria (podendo ser mais de uma em uma s\u00f3 solicita\u00e7\u00e3o) para a execu\u00e7\u00e3o de funcionalidades que utilizam entidades que somente com algumas\u00a0permiss\u00f5es perigosas liberadas\u00a0podem ser acessadas. Isso\u00a0assumindo que o developer est\u00e1 seguindo as &#8220;<a title=\"Permissions Best Practices\" href=\"http:\/\/developer.android.com\/intl\/pt-br\/training\/permissions\/best-practices.html\" target=\"_blank\" rel=\"noopener\">Permissions Best Practices<\/a>&#8221; indicadas na documenta\u00e7\u00e3o e n\u00e3o requisitando todas as permiss\u00f5es necess\u00e1rias logo na inicializa\u00e7\u00e3o da APP.<\/p>\n<p>Abaixo vamos seguir com a\u00a0utiliza\u00e7\u00e3o do novo sistema de permiss\u00f5es em tempo de execu\u00e7\u00e3o demonstrando parte do c\u00f3digo necess\u00e1rio em um exemplo: PermissionTarget23 project.<\/p>\n<p>Come\u00e7ando pelo AndroidManifest.xml, temos as declara\u00e7\u00f5es de permiss\u00f5es como j\u00e1 utilizado no modelo antigo:<\/p>\n<pre><span class=\"hljs-pi\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">manifest<\/span> <span class=\"hljs-attribute\">xmlns:android<\/span>=<span class=\"hljs-value\">\"http:\/\/schemas.android.com\/apk\/res\/android\"<\/span><\/span>\n<span class=\"hljs-tag\">    <span class=\"hljs-attribute\">package<\/span>=<span class=\"hljs-value\">\"br.com.thiengo.permissiontarget23\"<\/span>&gt;<\/span>\n\n    <span class=\"hljs-comment\">&lt;!-- NORMALS PERMISSIONS --&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">uses-permission<\/span> <span class=\"hljs-attribute\">android:name<\/span>=<span class=\"hljs-value\">\"android.permission.INTERNET\"<\/span>\/&gt;<\/span>\n\n    <span class=\"hljs-comment\">&lt;!-- DANGEROUS PERMISSIONS --&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">uses-permission<\/span> <span class=\"hljs-attribute\">android:name<\/span>=<span class=\"hljs-value\">\"android.permission.ACCESS_FINE_LOCATION\"<\/span>\/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">uses-permission<\/span> <span class=\"hljs-attribute\">android:name<\/span>=<span class=\"hljs-value\">\"android.permission.ACCESS_COARSE_LOCATION\"<\/span>\/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">uses-permission<\/span> <span class=\"hljs-attribute\">android:name<\/span>=<span class=\"hljs-value\">\"android.permission.WRITE_EXTERNAL_STORAGE\"<\/span>\/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">uses-permission<\/span> <span class=\"hljs-attribute\">android:name<\/span>=<span class=\"hljs-value\">\"android.permission.READ_EXTERNAL_STORAGE\"<\/span>\/&gt;<\/span>\n\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">application<\/span><\/span>\n<span class=\"hljs-tag\">        <span class=\"hljs-attribute\">android:allowBackup<\/span>=<span class=\"hljs-value\">\"true\"<\/span><\/span>\n<span class=\"hljs-tag\">        <span class=\"hljs-attribute\">android:icon<\/span>=<span class=\"hljs-value\">\"@mipmap\/ic_launcher\"<\/span><\/span>\n<span class=\"hljs-tag\">        <span class=\"hljs-attribute\">android:label<\/span>=<span class=\"hljs-value\">\"@string\/app_name\"<\/span><\/span>\n<span class=\"hljs-tag\">        <span class=\"hljs-attribute\">android:supportsRtl<\/span>=<span class=\"hljs-value\">\"true\"<\/span><\/span>\n<span class=\"hljs-tag\">        <span class=\"hljs-attribute\">android:theme<\/span>=<span class=\"hljs-value\">\"@style\/AppTheme\"<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">activity<\/span> <span class=\"hljs-attribute\">android:name<\/span>=<span class=\"hljs-value\">\".MainActivity\"<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">intent-filter<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">action<\/span> <span class=\"hljs-attribute\">android:name<\/span>=<span class=\"hljs-value\">\"android.intent.action.MAIN\"<\/span> \/&gt;<\/span>\n\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-title\">category<\/span> <span class=\"hljs-attribute\">android:name<\/span>=<span class=\"hljs-value\">\"android.intent.category.LAUNCHER\"<\/span> \/&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-title\">intent-filter<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-title\">activity<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-title\">application<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-title\">manifest<\/span>&gt;<\/span>\n\n\n\nhttps:\/\/www.thiengo.com.br\/sistema-de-permissoes-em-tempo-de-execucao-android-m<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>O sistema de permiss\u00f5es do Android mant\u00e9m todo o sistema \/ framework consistente fazendo com que APPs que necessitem acesso a dados n\u00e3o produzidos por elas (dentro do sandbox dedicado a elas) ou a funcionalidades n\u00e3o dispon\u00edveis nelas\u00a0definam permiss\u00f5es para que esse consumo seja poss\u00edvel.\u00a0Dentre\u00a0os&#8230;<\/p>\n","protected":false},"author":2,"featured_media":4516,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_angie_page":false,"page_builder":"","footnotes":""},"categories":[77],"tags":[],"class_list":["post-4515","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/posts\/4515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=4515"}],"version-history":[{"count":0,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/posts\/4515\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/media\/4516"}],"wp:attachment":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=4515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=4515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=4515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}