{"id":1035,"date":"2020-08-14T09:21:26","date_gmt":"2020-08-14T12:21:26","guid":{"rendered":"https:\/\/micheladrianomedeiros.com.br\/blog\/?p=1035"},"modified":"2020-08-14T15:37:09","modified_gmt":"2020-08-14T18:37:09","slug":"android-10","status":"publish","type":"post","link":"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/","title":{"rendered":"Android #10"},"content":{"rendered":"\n<p>Vamos fazer uma rota de onde voc\u00ea se encontra para a academia que voc\u00ea escolheu, ao clicar no bot\u00e3o COMO CHEGAR.<\/p>\n\n\n\n<p>Vamos utilizar o Google Maps, outra op\u00e7\u00e3o que eu vi \u00e9 o <a rel=\"noreferrer noopener\" href=\"https:\/\/www.mapbox.com\/\" target=\"_blank\">Mapbox<\/a> s\u00f3 que n\u00e3o consegui fazer funcionar com essa biblioteca.<\/p>\n\n\n\n<p>Para utilizar o Google Maps voc\u00ea precisar criar um projeto na plataforma do Google para poder gerar uma chave de acesso. (<a rel=\"noreferrer noopener\" href=\"https:\/\/ptsnappy.appypie.com\/faqs\/how-to-enable-google-api-key\" target=\"_blank\">N\u00e3o sabe criar um projeto? Siga os primeiros passos desse tutorial<\/a>) <\/p>\n\n\n\n<p>Siga esse tutorial para obter a chave de acesso: <a rel=\"noreferrer noopener\" href=\"https:\/\/maplink.global\/blog\/como-obter-chave-api-google-maps\/\" target=\"_blank\">Guia r\u00e1pido: como obter uma Chave de API do Google Maps?<\/a><\/p>\n\n\n\n<p>Outra API que devemos ativar \u00e9 a Direction API, <a rel=\"noreferrer noopener\" href=\"https:\/\/ptsnappy.appypie.com\/faqs\/how-to-enable-google-api-key\" target=\"_blank\">veja o passo 11 desse tutorial.<\/a><\/p>\n\n\n\n<p>Agora vamos aos arquivos e veja os c\u00f3digos:<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/#buildgradle\" >build.gradle<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/#activity_como_chegarxml\" >activity_como_chegar.xml<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/#AndroidManifestxml\" >AndroidManifest.xml<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/#DetalheActivityjava\" >DetalheActivity.java<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/#DirectionParserjava\" >DirectionParser.java<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/#ComoChegarjava\" >ComoChegar.java<\/a><\/li><\/ul><\/nav><\/div>\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"buildgradle\"><\/span><strong>build.gradle<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:xhtml decode:true \">apply plugin: 'com.android.application'\n\/\/apply plugin: 'kotlin-android'\n\nandroid {\n    compileSdkVersion 30\n\n    defaultConfig {\n        applicationId \"br.com.micheladrianomedeiros.ondetreinar\"\n        minSdkVersion 19\n        targetSdkVersion 30\n        versionCode 1\n        versionName \"1.0\"\n\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility = 1.8\n        targetCompatibility = 1.8\n    }\n\n    android {\n        buildFeatures{\n            dataBinding = true\n            viewBinding = true\n        }\n    }\n\n}\n\ndependencies {\n    implementation fileTree(dir: 'libs', include: ['*.jar'])\n\n    implementation 'androidx.appcompat:appcompat:1.2.0'\n    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'\n    implementation 'com.google.android.material:material:1.2.0'\n    implementation 'androidx.navigation:navigation-fragment:2.3.0'\n    implementation 'androidx.navigation:navigation-ui:2.3.0'\n    testImplementation 'junit:junit:4.13'\n    androidTestImplementation 'androidx.test.ext:junit:1.1.1'\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'\n\n    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'\n\n    \/\/gson\n    implementation 'com.google.code.gson:gson:2.8.6'\n\n    def recyclerview_version = \"1.0.0\"\n    implementation \"androidx.recyclerview:recyclerview:$recyclerview_version\"\n    implementation \"androidx.recyclerview:recyclerview-selection:$recyclerview_version\"\n    implementation 'com.github.bumptech.glide:glide:4.8.0'\n    annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'\n\n    implementation 'com.squareup.picasso:picasso:2.71828'\n\n    \/\/Google Maps\n    implementation 'com.google.android.gms:play-services-maps:17.0.0'\n    implementation 'com.google.android.gms:play-services-location:17.0.0'\n    androidTestImplementation 'androidx.test:runner:1.2.0'\n}\n\n<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"activity_como_chegarxml\"><\/span>activity_como_chegar.xml<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Esse arquivo \u00e9 a tela que mostra o mapa com a rota. Para criar essa tela escolha a activity que j\u00e1 vem preparada para mapas. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"899\" height=\"632\" src=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/08\/image-2.png\" alt=\"\" class=\"wp-image-1053\" srcset=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/08\/image-2.png 899w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/08\/image-2-300x211.png 300w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/08\/image-2-768x540.png 768w\" sizes=\"auto, (max-width: 899px) 100vw, 899px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:xhtml decode:true \">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n&lt;fragment xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:map=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:id=\"@+id\/map\"\n    android:name=\"com.google.android.gms.maps.SupportMapFragment\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    tools:context=\".mapa.ComoChegar\" \/&gt;<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"AndroidManifestxml\"><\/span>AndroidManifest.xml<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>As seguintes declara\u00e7\u00f5es: @string\/google_maps_key e @integer\/google_play_services_version. <\/p>\n\n\n\n<p>O primeiro est\u00e1 no arquivo google_maps_api.xml.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:xhtml decode:true \">&lt;resources&gt;\n    &lt;string name=\"google_maps_key\" templateMergeStrategy=\"preserve\" translatable=\"false\"&gt;Coloque aqui a sua chave&lt;\/string&gt;\n&lt;\/resources&gt;<\/pre><\/div>\n\n\n\n<p>O segundo est\u00e1 no arquivo values.xml, esse arquivo n\u00e3o fica vis\u00edvel para voc\u00ea, ele est\u00e1 na pasta do gradle.<\/p>\n\n\n\n<p>Pelo que eu lembre esses dois arquivos s\u00e3o gerados automaticamente.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:xhtml decode:true \">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n&lt;manifest xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    package=\"br.com.micheladrianomedeiros.ondetreinar\"&gt;\n\n    &lt;!--\n         The ACCESS_COARSE\/FINE_LOCATION permissions are not required to use\n         Google Maps Android API v2, but you must specify either coarse or fine\n         location permissions for the \"MyLocation\" functionality.\n    --&gt;\n    &lt;uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" \/&gt;\n    &lt;uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" \/&gt;\n    &lt;uses-permission android:name=\"android.permission.INTERNET\" \/&gt;\n    &lt;uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" \/&gt;\n    &lt;uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"\/&gt;\n\n    &lt;application\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\"\n        android:usesCleartextTraffic=\"true\"&gt;\n\n        &lt;!--\n             The API key for Google Maps-based APIs is defined as a string resource.\n             (See the file \"res\/values\/google_maps_api.xml\").\n             Note that the API key is linked to the encryption key used to sign the APK.\n             You need a different API key for each encryption key, including the release key that is used to\n             sign the APK for publishing.\n             You can define the keys for the debug and release targets in src\/debug\/ and src\/release\/.\n        --&gt;\n        &lt;meta-data\n            android:name=\"com.google.android.geo.API_KEY\"\n            android:value=\"@string\/google_maps_key\" \/&gt;\n\n        &lt;meta-data\n            android:name=\"com.google.android.gms.version\"\n            android:value=\"@integer\/google_play_services_version\" \/&gt;\n\n        &lt;activity\n            android:name=\".mapa.ComoChegar\"\n            android:label=\"@string\/title_activity_como_chegar\"&gt;&lt;\/activity&gt;\n        &lt;activity\n            android:name=\".DetalheActivity\"\n            android:label=\"@string\/title_activity_detalhe\"\n            android:theme=\"@style\/AppTheme.NoActionBar\" \/&gt;\n        &lt;activity android:name=\".ReviewList\" \/&gt;\n        &lt;activity android:name=\".MainActivity\"&gt;\n            &lt;intent-filter&gt;\n                &lt;action android:name=\"android.intent.action.MAIN\" \/&gt;\n\n                &lt;category android:name=\"android.intent.category.LAUNCHER\" \/&gt;\n            &lt;\/intent-filter&gt;\n        &lt;\/activity&gt;\n    &lt;\/application&gt;\n\n&lt;\/manifest&gt;<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"DetalheActivityjava\"><\/span>DetalheActivity.java<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Adicionei nesse arquivo a linha <strong>public static <\/strong>String <em>ENDERECO_ACADEMIA <\/em>= <strong>null<\/strong>; para ser utilizado no arquivo ComoChegar.java.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:java decode:true \">package br.com.micheladrianomedeiros.ondetreinar;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.util.Log;\nimport android.view.View;\nimport android.widget.Button;\nimport android.widget.ImageView;\nimport android.widget.RatingBar;\nimport android.widget.TextView;\n\nimport androidx.appcompat.app.AppCompatActivity;\n\nimport com.squareup.picasso.Picasso;\n\nimport br.com.micheladrianomedeiros.ondetreinar.adapters.CustomAdapter;\nimport br.com.micheladrianomedeiros.ondetreinar.mapa.ComoChegar;\nimport br.com.micheladrianomedeiros.ondetreinar.model.DetalheAcademia;\nimport br.com.micheladrianomedeiros.ondetreinar.remote.HTTPService;\n\npublic class DetalheActivity extends AppCompatActivity {\n\n    private TextView nomeDaAcademia, enderecoAcademia, telefoneAcademia, tipoAcademia, siteAcademia;\n    private ImageView imageView;\n    private RatingBar notaAcademia;\n    private Button comoChegar;\n\n    public static String ENDERECO_ACADEMIA = null;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_detalhe);\n\n        nomeDaAcademia = findViewById(R.id.nomeDaAcademia);\n        imageView = findViewById(R.id.imagemDaAcademia);\n\n        enderecoAcademia = findViewById(R.id.enderecoAcademia);\n        telefoneAcademia = findViewById(R.id.telefoneAcademia);\n        tipoAcademia = findViewById(R.id.tipoDeAcademia);\n        siteAcademia = findViewById(R.id.siteDaAcademia);\n        notaAcademia = findViewById(R.id.notaAcademia);\n\n        comoChegar = findViewById(R.id.comoChegarAcademia);\n        comoChegar.setOnClickListener(buttonClickListener);\n\n        nomeDaAcademia.setText(CustomAdapter.ACADEMIA_CIDADE.getNome() + \"\\n\"\n                + CustomAdapter.ACADEMIA_CIDADE.getCidade());\n        Picasso.get().load(CustomAdapter.ACADEMIA_CIDADE.getThumb())\n                .resize(100, 100).centerCrop().into(imageView);\n        buscarAcademia();\n    }\n\n    private void buscarAcademia() {\n        try {\n            HTTPService service = new HTTPService();\n            DetalheAcademia detalheAcademia = service\n                    .buscarAcademia(CustomAdapter.ACADEMIA_CIDADE.getId());\n            ENDERECO_ACADEMIA = detalheAcademia.getEndereco();\n            enderecoAcademia.setText(ENDERECO_ACADEMIA);\n            telefoneAcademia.setText(detalheAcademia.getTelefone());\n            tipoAcademia.setText(detalheAcademia.getTipoAcademia());\n            siteAcademia.setText(detalheAcademia.getSite());\n            notaAcademia.setRating(detalheAcademia.getNota());\n        } catch (Exception e) {\n\n        }\n    }\n\n    private View.OnClickListener buttonClickListener = v -&gt; {\n        switch (v.getId()) {\n            case R.id.comoChegarAcademia:\n                Intent intent = new Intent(this, ComoChegar.class);\n                startActivity(intent);\n                break;\n            case View.NO_ID:\n            default:\n                Log.i(\"erro\", \"nada\");\n                break;\n        }\n    };\n\n}\n<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"DirectionParserjava\"><\/span>DirectionParser.java<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Esse arquivo coloquei na pasta tools.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:java decode:true \">package br.com.micheladrianomedeiros.ondetreinar.tools;\n\nimport com.google.android.gms.maps.model.LatLng;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\n\npublic class DirectionParser {\n    \/**\n     * Receives a JSONObject and returns a list of lists containing latitude and longitude\n     *\/\n    public List&lt;List&lt;HashMap&lt;String, String&gt;&gt;&gt; parse(JSONObject jObject) {\n\n        List&lt;List&lt;HashMap&lt;String, String&gt;&gt;&gt; routes = new ArrayList&lt;List&lt;HashMap&lt;String, String&gt;&gt;&gt;();\n        JSONArray jRoutes = null;\n        JSONArray jLegs = null;\n        JSONArray jSteps = null;\n\n        try {\n\n            jRoutes = jObject.getJSONArray(\"routes\");\n\n            \/** Traversing all routes *\/\n            for (int i = 0; i &lt; jRoutes.length(); i++) {\n                jLegs = ((JSONObject) jRoutes.get(i)).getJSONArray(\"legs\");\n                List path = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;();\n\n                \/** Traversing all legs *\/\n                for (int j = 0; j &lt; jLegs.length(); j++) {\n                    jSteps = ((JSONObject) jLegs.get(j)).getJSONArray(\"steps\");\n\n                    \/** Traversing all steps *\/\n                    for (int k = 0; k &lt; jSteps.length(); k++) {\n                        String polyline = \"\";\n                        polyline = (String) ((JSONObject) ((JSONObject) jSteps.get(k)).get(\"polyline\")).get(\"points\");\n                        List&lt;LatLng&gt; list = decodePoly(polyline);\n\n                        \/** Traversing all points *\/\n                        for (int l = 0; l &lt; list.size(); l++) {\n                            HashMap&lt;String, String&gt; hm = new HashMap&lt;String, String&gt;();\n                            hm.put(\"lat\", Double.toString(((LatLng) list.get(l)).latitude));\n                            hm.put(\"lng\", Double.toString(((LatLng) list.get(l)).longitude));\n                            path.add(hm);\n                        }\n                    }\n                    routes.add(path);\n                }\n            }\n\n        } catch (JSONException e) {\n            e.printStackTrace();\n        } catch (Exception e) {\n        }\n        return routes;\n    }\n\n\n    private List&lt;LatLng&gt; decodePoly(String encoded) {\n\n        List&lt;LatLng&gt; poly = new ArrayList&lt;LatLng&gt;();\n        int index = 0, len = encoded.length();\n        int lat = 0, lng = 0;\n\n        while (index &lt; len) {\n            int b, shift = 0, result = 0;\n            do {\n                b = encoded.charAt(index++) - 63;\n                result |= (b &amp; 0x1f) &lt;&lt; shift;\n                shift += 5;\n            } while (b &gt;= 0x20);\n            int dlat = ((result &amp; 1) != 0 ? ~(result &gt;&gt; 1) : (result &gt;&gt; 1));\n            lat += dlat;\n\n            shift = 0;\n            result = 0;\n            do {\n                b = encoded.charAt(index++) - 63;\n                result |= (b &amp; 0x1f) &lt;&lt; shift;\n                shift += 5;\n            } while (b &gt;= 0x20);\n            int dlng = ((result &amp; 1) != 0 ? ~(result &gt;&gt; 1) : (result &gt;&gt; 1));\n            lng += dlng;\n\n            LatLng p = new LatLng((((double) lat \/ 1E5)),\n                    (((double) lng \/ 1E5)));\n            poly.add(p);\n        }\n        return poly;\n    }\n}<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"ComoChegarjava\"><\/span>ComoChegar.java<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Esse arquivo \u00e9 o que vai manipular os dados para criar a rota, eu criei uma pasta chamada mapa e coloquei esse arquivo l\u00e1.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:java decode:true \">package br.com.micheladrianomedeiros.ondetreinar.mapa;\n\nimport androidx.core.app.ActivityCompat;\nimport androidx.fragment.app.FragmentActivity;\n\nimport android.Manifest;\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.graphics.Color;\nimport android.location.Address;\nimport android.location.Geocoder;\nimport android.location.Location;\nimport android.os.AsyncTask;\nimport android.os.Bundle;\nimport android.util.Log;\nimport android.widget.Toast;\n\nimport com.google.android.gms.location.FusedLocationProviderClient;\nimport com.google.android.gms.location.LocationServices;\nimport com.google.android.gms.maps.CameraUpdateFactory;\nimport com.google.android.gms.maps.GoogleMap;\nimport com.google.android.gms.maps.OnMapReadyCallback;\nimport com.google.android.gms.maps.SupportMapFragment;\nimport com.google.android.gms.maps.model.LatLng;\nimport com.google.android.gms.maps.model.MarkerOptions;\nimport com.google.android.gms.maps.model.PolylineOptions;\nimport com.google.android.gms.tasks.Task;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.BufferedReader;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.InputStreamReader;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\n\nimport br.com.micheladrianomedeiros.ondetreinar.DetalheActivity;\nimport br.com.micheladrianomedeiros.ondetreinar.R;\nimport br.com.micheladrianomedeiros.ondetreinar.tools.DirectionParser;\n\n\npublic class ComoChegar extends FragmentActivity implements OnMapReadyCallback {\n\n    private GoogleMap mMap;\n    private LatLng mOrigin;\n\n    Location currentLocation;\n    FusedLocationProviderClient fusedLocationProviderClient;\n    private static final int REQUEST_CODE = 101;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_como_chegar);\n        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);\n        fetchLocation();\n    }\n\n    private void fetchLocation() {\n        if (ActivityCompat.checkSelfPermission(\n                this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &amp;&amp; ActivityCompat.checkSelfPermission(\n                this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {\n            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE);\n            return;\n        }\n        Task&lt;Location&gt; task = fusedLocationProviderClient.getLastLocation();\n        task.addOnSuccessListener(location -&gt; {\n            if (location != null) {\n                currentLocation = location;\n\n                SupportMapFragment supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);\n                assert supportMapFragment != null;\n                supportMapFragment.getMapAsync(ComoChegar.this);\n\n                mOrigin = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());\n            }\n        });\n    }\n\n    \/**\n     * This method will manipulate the Google Map on the main screen\n     *\/\n    @Override\n    public void onMapReady(GoogleMap googleMap) {\n        \/\/Google map setup\n        mMap = googleMap;\n        mMap.getUiSettings().setZoomControlsEnabled(true);\n        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &amp;&amp; ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {\n            \/\/ TODO: Consider calling\n            \/\/    ActivityCompat#requestPermissions\n            \/\/ here to request the missing permissions, and then overriding\n            \/\/   public void onRequestPermissionsResult(int requestCode, String[] permissions,\n            \/\/                                          int[] grantResults)\n            \/\/ to handle the case where the user grants the permission. See the documentation\n            \/\/ for ActivityCompat#requestPermissions for more details.\n            return;\n        }\n        mMap.setMyLocationEnabled(true);\n        mMap.getUiSettings().setMyLocationButtonEnabled(true);\n\n        \/\/ Show marker on the screen and adjust the zoom level\n        mMap.addMarker(new MarkerOptions().position(mOrigin).title(\"EU\"));\n        mMap.addMarker(new MarkerOptions().position(getLocationFromAddress(this)).title(\"DESTINO\"));\n        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mOrigin,15));\n        new TaskDirectionRequest().execute(buildRequestUrl(mOrigin));\n    }\n\n    \/**\n     * Create requested url for Direction API to get routes from origin to destination\n     *\n     * @param origin\n     * @return\n     *\/\n    private String buildRequestUrl(LatLng origin) {\n        String strOrigin = \"origin=\" + origin.latitude + \",\" + origin.longitude;\n        String strDestination = \"destination=\"+ DetalheActivity.ENDERECO_ACADEMIA;\n        String sensor = \"sensor=false\";\n        String mode = \"mode=driving\";\n\n        String param = strOrigin + \"&amp;\" + strDestination + \"&amp;\" + sensor + \"&amp;\" + mode;\n        String output = \"json\";\n        String APIKEY = getResources().getString(R.string.google_maps_key);\n\n        String url = \"https:\/\/maps.googleapis.com\/maps\/api\/directions\/\" + output + \"?\" + param + \"&amp;key=\"+APIKEY;\n        Log.d(\"TAG\", url);\n        return url;\n    }\n\n    \/**\n     * Request direction from Google Direction API\n     *\n     *\n     * @return JSON data routes\/direction\n     *\/\n    private String requestDirection(String requestedUrl) {\n        String responseString = \"\";\n        InputStream inputStream = null;\n        HttpURLConnection httpURLConnection = null;\n        try {\n            URL url = new URL(requestedUrl);\n            httpURLConnection = (HttpURLConnection) url.openConnection();\n            httpURLConnection.connect();\n\n            inputStream = httpURLConnection.getInputStream();\n            InputStreamReader reader = new InputStreamReader(inputStream);\n            BufferedReader bufferedReader = new BufferedReader(reader);\n\n            StringBuffer stringBuffer = new StringBuffer();\n            String line = \"\";\n            while ((line = bufferedReader.readLine()) != null) {\n                stringBuffer.append(line);\n            }\n            responseString = stringBuffer.toString();\n            bufferedReader.close();\n            reader.close();\n        } catch (Exception e) {\n            e.printStackTrace();\n        } finally {\n            if (inputStream != null) {\n                try {\n                    inputStream.close();\n                } catch (IOException e) {\n                    e.printStackTrace();\n                }\n            }\n        }\n        httpURLConnection.disconnect();\n        return responseString;\n    }\n\n    \/\/Get JSON data from Google Direction\n    public class TaskDirectionRequest extends AsyncTask&lt;String, Void, String&gt; {\n        @Override\n        protected String doInBackground(String... strings) {\n            String responseString = \"\";\n            try {\n                responseString = requestDirection(strings[0]);\n            } catch (Exception e) {\n                e.printStackTrace();\n            }\n            return responseString;\n        }\n\n        @Override\n        protected void onPostExecute(String responseString) {\n            super.onPostExecute(responseString);\n            \/\/Json object parsing\n            TaskParseDirection parseResult = new TaskParseDirection();\n            parseResult.execute(responseString);\n        }\n    }\n\n\n    \/\/Parse JSON Object from Google Direction API &amp; display it on Map\n    public class TaskParseDirection extends AsyncTask&lt;String, Void, List&lt;List&lt;HashMap&lt;String, String&gt;&gt;&gt;&gt; {\n        @Override\n        protected List&lt;List&lt;HashMap&lt;String, String&gt;&gt;&gt; doInBackground(String... jsonString) {\n            List&lt;List&lt;HashMap&lt;String, String&gt;&gt;&gt; routes = null;\n            JSONObject jsonObject = null;\n\n            try {\n                jsonObject = new JSONObject(jsonString[0]);\n                DirectionParser parser = new DirectionParser();\n                routes = parser.parse(jsonObject);\n            } catch (JSONException e) {\n                e.printStackTrace();\n            }\n            return routes;\n        }\n\n        @Override\n        protected void onPostExecute(List&lt;List&lt;HashMap&lt;String, String&gt;&gt;&gt; lists) {\n            super.onPostExecute(lists);\n            ArrayList points = null;\n            PolylineOptions polylineOptions = null;\n\n            for (List&lt;HashMap&lt;String, String&gt;&gt; path : lists) {\n                points = new ArrayList();\n                polylineOptions = new PolylineOptions();\n\n                for (HashMap&lt;String, String&gt; point : path) {\n                    double lat = Double.parseDouble(point.get(\"lat\"));\n                    double lon = Double.parseDouble(point.get(\"lng\"));\n\n                    points.add(new LatLng(lat, lon));\n                }\n                polylineOptions.addAll(points);\n                polylineOptions.width(15f);\n                polylineOptions.color(Color.BLUE);\n                polylineOptions.geodesic(true);\n            }\n            if (polylineOptions != null) {\n                mMap.addPolyline(polylineOptions);\n            } else {\n                Toast.makeText(getApplicationContext(), \"Direction not found\", Toast.LENGTH_LONG).show();\n            }\n        }\n    }\n\n    public LatLng getLocationFromAddress(Context context) {\n\n        Geocoder coder = new Geocoder(context);\n        List&lt;Address&gt; address;\n        LatLng p1 = null;\n\n        try {\n            \/\/ May throw an IOException\n            address = coder.getFromLocationName(DetalheActivity.ENDERECO_ACADEMIA, 5);\n            if (address == null) {\n                return null;\n            }\n\n            Address location = address.get(0);\n            p1 = new LatLng(location.getLatitude(), location.getLongitude() );\n\n        } catch (IOException ex) {\n\n            ex.printStackTrace();\n        }\n\n        return p1;\n    }\n\n}<\/pre><\/div>\n\n\n\n<figure class=\"wp-block-embed-youtube aligncenter wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video_embed clearfix\"><div class=\"video_embed clearfix\"><iframe loading=\"lazy\" title=\"Artigo Android #10\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/OniRcCO6ggQ?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div><\/div>\n<\/div><\/figure>\n\n\n\n<p><em>Fonte:<\/em><\/p>\n\n\n\n<p><em><a rel=\"noreferrer noopener\" href=\"https:\/\/c1ctech.com\/android-googlemap-example-to-draw-route-between-two-locations\/\" target=\"_blank\">https:\/\/c1ctech.com\/android-googlemap-example-to-draw-route-between-two-locations\/<\/a><\/em><\/p>\n\n\n\n<p><em><br><a href=\"https:\/\/www.journaldev.com\/13373\/android-google-map-drawing-route-two-points\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.journaldev.com\/13373\/android-google-map-drawing-route-two-points<\/a><\/em><\/p>\n\n\n\n<p><em><br><a href=\"https:\/\/www.tutorialspoint.com\/how-to-show-current-location-on-a-google-map-on-android\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.tutorialspoint.com\/how-to-show-current-location-on-a-google-map-on-android<\/a><\/em><\/p>\n\n\n\n<p><em><br><a rel=\"noreferrer noopener\" href=\"https:\/\/medium.com\/@andrea8787\/android-example-draw-route-between-two-location-using-google-direction-7e7610f5e7f2\nhttps:\/\/stackoverflow.com\/questions\/3574644\/how-can-i-find-the-latitude-and-longitude-from-address\" target=\"_blank\">https:\/\/medium.com\/@andrea8787\/android-example-draw-route-between-two-location-using-google-direction-7e7610f5e7f2<br>https:\/\/stackoverflow.com\/questions\/3574644\/how-can-i-find-the-latitude-and-longitude-from-address<\/a><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vamos fazer uma rota de onde voc\u00ea se encontra para a academia que voc\u00ea escolheu, ao clicar no bot\u00e3o COMO CHEGAR. Vamos utilizar o Google Maps, outra op\u00e7\u00e3o que eu vi \u00e9 o Mapbox s\u00f3 que n\u00e3o consegui fazer funcionar com essa biblioteca. Para utilizar o Google Maps voc\u00ea precisar criar um projeto na plataforma [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":215,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34],"tags":[],"class_list":["post-1035","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.5 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Android #10 - Viciados em Aprender<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Android #10\" \/>\n<meta property=\"og:description\" content=\"Vamos fazer uma rota de onde voc\u00ea se encontra para a academia que voc\u00ea escolheu, ao clicar no bot\u00e3o COMO CHEGAR. Vamos utilizar o Google Maps, outra op\u00e7\u00e3o que eu vi \u00e9 o Mapbox s\u00f3 que n\u00e3o consegui fazer funcionar com essa biblioteca. Para utilizar o Google Maps voc\u00ea precisar criar um projeto na plataforma [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/\" \/>\n<meta property=\"og:site_name\" content=\"Viciados em Aprender\" \/>\n<meta property=\"article:published_time\" content=\"2020-08-14T12:21:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-08-14T18:37:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/android-logo.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"425\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"blackzig\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"blackzig\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/android-10\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/android-10\\\/\"},\"author\":{\"name\":\"blackzig\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/687a6d17428a0f0e040aefbd858ebc1e\"},\"headline\":\"Android #10\",\"datePublished\":\"2020-08-14T12:21:26+00:00\",\"dateModified\":\"2020-08-14T18:37:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/android-10\\\/\"},\"wordCount\":298,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/687a6d17428a0f0e040aefbd858ebc1e\"},\"image\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/android-10\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/android-logo.png\",\"articleSection\":[\"Android\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/android-10\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/android-10\\\/\",\"url\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/android-10\\\/\",\"name\":\"Android #10 - Viciados em Aprender\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/android-10\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/android-10\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/android-logo.png\",\"datePublished\":\"2020-08-14T12:21:26+00:00\",\"dateModified\":\"2020-08-14T18:37:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/android-10\\\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/android-10\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/android-10\\\/#primaryimage\",\"url\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/android-logo.png\",\"contentUrl\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/android-logo.png\",\"width\":1000,\"height\":425},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/android-10\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Android #10\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/\",\"name\":\"Viciados em Aprender\",\"description\":\"Queremos aprender tudo o que for poss\u00edvel nesta vida.\",\"publisher\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/687a6d17428a0f0e040aefbd858ebc1e\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/687a6d17428a0f0e040aefbd858ebc1e\",\"name\":\"blackzig\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg\",\"url\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg\",\"contentUrl\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg\",\"width\":1920,\"height\":1080,\"caption\":\"blackzig\"},\"logo\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg\"},\"sameAs\":[\"http:\\\/\\\/www.micheladrianomedeiros.com.br\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Android #10 - Viciados em Aprender","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/","og_locale":"pt_PT","og_type":"article","og_title":"Android #10","og_description":"Vamos fazer uma rota de onde voc\u00ea se encontra para a academia que voc\u00ea escolheu, ao clicar no bot\u00e3o COMO CHEGAR. Vamos utilizar o Google Maps, outra op\u00e7\u00e3o que eu vi \u00e9 o Mapbox s\u00f3 que n\u00e3o consegui fazer funcionar com essa biblioteca. Para utilizar o Google Maps voc\u00ea precisar criar um projeto na plataforma [&hellip;]","og_url":"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/","og_site_name":"Viciados em Aprender","article_published_time":"2020-08-14T12:21:26+00:00","article_modified_time":"2020-08-14T18:37:09+00:00","og_image":[{"width":1000,"height":425,"url":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/android-logo.png","type":"image\/png"}],"author":"blackzig","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"blackzig","Tempo estimado de leitura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/#article","isPartOf":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/"},"author":{"name":"blackzig","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#\/schema\/person\/687a6d17428a0f0e040aefbd858ebc1e"},"headline":"Android #10","datePublished":"2020-08-14T12:21:26+00:00","dateModified":"2020-08-14T18:37:09+00:00","mainEntityOfPage":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/"},"wordCount":298,"commentCount":0,"publisher":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#\/schema\/person\/687a6d17428a0f0e040aefbd858ebc1e"},"image":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/#primaryimage"},"thumbnailUrl":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/android-logo.png","articleSection":["Android"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/","url":"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/","name":"Android #10 - Viciados em Aprender","isPartOf":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/#primaryimage"},"image":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/#primaryimage"},"thumbnailUrl":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/android-logo.png","datePublished":"2020-08-14T12:21:26+00:00","dateModified":"2020-08-14T18:37:09+00:00","breadcrumb":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/#primaryimage","url":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/android-logo.png","contentUrl":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/android-logo.png","width":1000,"height":425},{"@type":"BreadcrumbList","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/android-10\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/micheladrianomedeiros.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Android #10"}]},{"@type":"WebSite","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#website","url":"https:\/\/micheladrianomedeiros.com.br\/blog\/","name":"Viciados em Aprender","description":"Queremos aprender tudo o que for poss\u00edvel nesta vida.","publisher":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#\/schema\/person\/687a6d17428a0f0e040aefbd858ebc1e"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/micheladrianomedeiros.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":["Person","Organization"],"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#\/schema\/person\/687a6d17428a0f0e040aefbd858ebc1e","name":"blackzig","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2025\/07\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg","url":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2025\/07\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg","contentUrl":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2025\/07\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg","width":1920,"height":1080,"caption":"blackzig"},"logo":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2025\/07\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg"},"sameAs":["http:\/\/www.micheladrianomedeiros.com.br\/"]}]}},"_links":{"self":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/1035","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1035"}],"version-history":[{"count":16,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/1035\/revisions"}],"predecessor-version":[{"id":1056,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/1035\/revisions\/1056"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media\/215"}],"wp:attachment":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1035"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1035"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}