<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Issue with loading .mmpk file from Internal Storage for Offline Use in ArcGIS Runtime SDK for Android Questions</title>
    <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/issue-with-loading-mmpk-file-from-internal-storage/m-p/259716#M1695</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have resolved my issue !&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I had the code right, it was Android Permissions that was causing the issue.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Could someone from ArcGIS please add this to the tutorial posted above as this will really help early adopters that are developing. The tutorial is great but recent changes to the Android OS has made extra steps required which I have included a resolution below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Explanation of why issue occurs.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Beginning with Android 6.0 (API level 23) dangerous permissions need to be allowed by the user even if the manifest includes the required permission.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Resolution (without including code to prompt user for required permissions):&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Install App &amp;gt; Go to Settings &amp;gt; Search for App Permissions &amp;gt; Select Storage &amp;gt; Flick the switch to allow your app access.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 12 Apr 2018 03:54:11 GMT</pubDate>
    <dc:creator>JoelSmith-Lowe</dc:creator>
    <dc:date>2018-04-12T03:54:11Z</dc:date>
    <item>
      <title>Issue with loading .mmpk file from Internal Storage for Offline Use</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/issue-with-loading-mmpk-file-from-internal-storage/m-p/259715#M1694</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi All,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am currently developing an Android application that will use esri ArcGIS Android SDK for its Map Activity.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Currently I have been able to get it working using online servers which is great but I am wanting that Activity to load a local .mmpk file to use instead of using online services to get map tiles.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have stored the file devlabs-package.mmpk on the root folder of Internal Storage. (Folder contains folders like Android, DCIM, Download, Pictures, etc is stored.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have been unsuccessful after trying to follow the following guide which from what I can tell is simply reading the map data from an SD card instead of the phones internal storage. &lt;A class="link-titled" href="https://developers.arcgis.com/labs/android/display-a-map-while-offline/" title="https://developers.arcgis.com/labs/android/display-a-map-while-offline/" rel="nofollow noopener noreferrer" target="_blank"&gt;Display a map while offline | ArcGIS for Developers&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I can confirm that when I add the else statement below it will load but will load using online servers instead of the local .mmpk file but for testing purposes I have removed the statement as I do not want to use online servers at all at this stage of development.&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;SPAN style="color: #cc7832;"&gt;private void &lt;/SPAN&gt;&lt;SPAN style="color: #ffc66d;"&gt;setupMobileMap&lt;/SPAN&gt;() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #cc7832;"&gt;if &lt;/SPAN&gt;(&lt;SPAN style="color: #9876aa;"&gt;mMapView &lt;/SPAN&gt;!= &lt;SPAN style="color: #cc7832;"&gt;null&lt;/SPAN&gt;) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; File mmpkFile = &lt;SPAN style="color: #cc7832;"&gt;new &lt;/SPAN&gt;File(Environment.getDataDirectory()&lt;SPAN style="color: #cc7832;"&gt;,&lt;/SPAN&gt;&lt;SPAN style="color: #6a8759;"&gt;"devlabs-package.mmpk"&lt;/SPAN&gt;)&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; final &lt;/SPAN&gt;MobileMapPackage mapPackage = &lt;SPAN style="color: #cc7832;"&gt;new &lt;/SPAN&gt;MobileMapPackage(mmpkFile.getAbsolutePath())&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;mapPackage.addDoneLoadingListener(&lt;SPAN style="color: #cc7832;"&gt;new &lt;/SPAN&gt;Runnable() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #bbb529;"&gt;@Override
&lt;/SPAN&gt;&lt;SPAN style="color: #bbb529;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;public void &lt;/SPAN&gt;&lt;SPAN style="color: #ffc66d;"&gt;run&lt;/SPAN&gt;() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #808080;"&gt;// Verify the file loaded and there is at least one map
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;if &lt;/SPAN&gt;(&lt;SPAN style="color: #b389c5;"&gt;mapPackage&lt;/SPAN&gt;.getLoadStatus() == LoadStatus.LOADED &amp;amp;&amp;amp; &lt;SPAN style="color: #b389c5;"&gt;mapPackage&lt;/SPAN&gt;.getMaps().size() &amp;gt; &lt;SPAN style="color: #6897bb;"&gt;0&lt;/SPAN&gt;) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #9876aa;"&gt;mMapView&lt;/SPAN&gt;.setMap(&lt;SPAN style="color: #b389c5;"&gt;mapPackage&lt;/SPAN&gt;.getMaps().get(&lt;SPAN style="color: #6897bb;"&gt;0&lt;/SPAN&gt;))&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;} &lt;SPAN style="color: #cc7832;"&gt;else &lt;/SPAN&gt;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #808080;"&gt;// inflate MapView from layout
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #9876aa;"&gt;mMapView &lt;/SPAN&gt;= (MapView) findViewById(R.id.&lt;SPAN style="color: #9876aa; font-style: italic;"&gt;mapView&lt;/SPAN&gt;)&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;// create a map with the BasemapType topographic
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ArcGISMap map = &lt;SPAN style="color: #cc7832;"&gt;new &lt;/SPAN&gt;ArcGISMap(Basemap.Type.&lt;SPAN style="color: #9876aa; font-style: italic;"&gt;TOPOGRAPHIC&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="color: #6897bb;"&gt;34.056295&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;, &lt;/SPAN&gt;-&lt;SPAN style="color: #6897bb;"&gt;117.195800&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="color: #6897bb;"&gt;16&lt;/SPAN&gt;)&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;// set the map to be displayed in this view
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #9876aa;"&gt;mMapView&lt;/SPAN&gt;.setMap(map)&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;// Error if the mobile map package fails to load or there are no maps included in the package
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //setupMap();
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;mapPackage.loadAsync()&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/PRE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Using the code below without the else statement, it loads the API but no tiles are loaded because I believe I am not telling android to look at Internal Storage instead of SD Card or External Storage that is included in the sample code that is in the tutorial linked above.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CURRENT CODE: (Everything except else statement for test purposes)&lt;/P&gt;&lt;P&gt;Activity Name: MapsActivity&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;SPAN style="color: #cc7832;"&gt;import &lt;/SPAN&gt;&lt;SPAN style="background-color: #344134;"&gt;android&lt;/SPAN&gt;.os.Bundle&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;import &lt;/SPAN&gt;&lt;SPAN style="background-color: #344134;"&gt;android&lt;/SPAN&gt;.os.Environment&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;import &lt;/SPAN&gt;&lt;SPAN style="background-color: #344134;"&gt;android&lt;/SPAN&gt;.support.v7.app.AppCompatActivity&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;import &lt;/SPAN&gt;com.esri.arcgisruntime.loadable.LoadStatus&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;import &lt;/SPAN&gt;com.esri.arcgisruntime.mapping.ArcGISMap&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;import &lt;/SPAN&gt;com.esri.arcgisruntime.mapping.Basemap&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;import &lt;/SPAN&gt;com.esri.arcgisruntime.mapping.MobileMapPackage&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;import &lt;/SPAN&gt;com.esri.arcgisruntime.mapping.view.MapView&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;import &lt;/SPAN&gt;java.io.File&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;public class &lt;/SPAN&gt;MapsActivity &lt;SPAN style="color: #cc7832;"&gt;extends &lt;/SPAN&gt;AppCompatActivity {

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #cc7832;"&gt;private &lt;/SPAN&gt;MapView &lt;SPAN style="color: #9876aa;"&gt;mMapView&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void &lt;/SPAN&gt;&lt;SPAN style="color: #ffc66d;"&gt;setupMobileMap&lt;/SPAN&gt;() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #cc7832;"&gt;if &lt;/SPAN&gt;(&lt;SPAN style="color: #9876aa;"&gt;mMapView &lt;/SPAN&gt;!= &lt;SPAN style="color: #cc7832;"&gt;null&lt;/SPAN&gt;) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; File mmpkFile = &lt;SPAN style="color: #cc7832;"&gt;new &lt;/SPAN&gt;File(Environment.&lt;SPAN style="font-style: italic;"&gt;getExternalStorageDirectory&lt;/SPAN&gt;()&lt;SPAN style="color: #cc7832;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="color: #6a8759;"&gt;"devlabs-package.mmpk"&lt;/SPAN&gt;)&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; final &lt;/SPAN&gt;MobileMapPackage mapPackage = &lt;SPAN style="color: #cc7832;"&gt;new &lt;/SPAN&gt;MobileMapPackage(mmpkFile.getAbsolutePath())&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;mapPackage.addDoneLoadingListener(&lt;SPAN style="color: #cc7832;"&gt;new &lt;/SPAN&gt;Runnable() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #bbb529;"&gt;@Override
&lt;/SPAN&gt;&lt;SPAN style="color: #bbb529;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;public void &lt;/SPAN&gt;&lt;SPAN style="color: #ffc66d;"&gt;run&lt;/SPAN&gt;() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #808080;"&gt;// Verify the file loaded and there is at least one map
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;if &lt;/SPAN&gt;(&lt;SPAN style="color: #b389c5;"&gt;mapPackage&lt;/SPAN&gt;.getLoadStatus() == LoadStatus.&lt;SPAN style="color: #9876aa; font-style: italic;"&gt;LOADED &lt;/SPAN&gt;&amp;amp;&amp;amp; &lt;SPAN style="color: #b389c5;"&gt;mapPackage&lt;/SPAN&gt;.getMaps().size() &amp;gt; &lt;SPAN style="color: #6897bb;"&gt;0&lt;/SPAN&gt;) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #9876aa;"&gt;mMapView&lt;/SPAN&gt;.setMap(&lt;SPAN style="color: #b389c5;"&gt;mapPackage&lt;/SPAN&gt;.getMaps().get(&lt;SPAN style="color: #6897bb;"&gt;0&lt;/SPAN&gt;))&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;mapPackage.loadAsync()&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}


&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #bbb529;"&gt;@Override
&lt;/SPAN&gt;&lt;SPAN style="color: #bbb529;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;protected void &lt;/SPAN&gt;&lt;SPAN style="color: #ffc66d;"&gt;onCreate&lt;/SPAN&gt;(Bundle savedInstanceState) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #cc7832;"&gt;super&lt;/SPAN&gt;.onCreate(savedInstanceState)&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;setContentView(R.layout.&lt;SPAN style="color: #9876aa; font-style: italic;"&gt;activity_map&lt;/SPAN&gt;)&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;// inflate MapView from layout
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #9876aa;"&gt;mMapView &lt;/SPAN&gt;= (MapView) findViewById(R.id.&lt;SPAN style="color: #9876aa; font-style: italic;"&gt;mapView&lt;/SPAN&gt;)&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;setupMobileMap()&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;// create a map with the BasemapType topographic
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ArcGISMap map = new ArcGISMap(Basemap.Type.TOPOGRAPHIC, 34.056295, -117.195800, 16);
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set the map to be displayed in this view
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //mMapView.setupMap(map);
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}


&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #bbb529;"&gt;@Override
&lt;/SPAN&gt;&lt;SPAN style="color: #bbb529;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;protected void &lt;/SPAN&gt;&lt;SPAN style="color: #ffc66d;"&gt;onPause&lt;/SPAN&gt;() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #cc7832;"&gt;super&lt;/SPAN&gt;.onPause()&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #9876aa;"&gt;mMapView&lt;/SPAN&gt;.pause()&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #bbb529;"&gt;@Override
&lt;/SPAN&gt;&lt;SPAN style="color: #bbb529;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;protected void &lt;/SPAN&gt;&lt;SPAN style="color: #ffc66d;"&gt;onResume&lt;/SPAN&gt;() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #cc7832;"&gt;super&lt;/SPAN&gt;.onResume()&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #9876aa;"&gt;mMapView&lt;/SPAN&gt;.resume()&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #bbb529;"&gt;@Override
&lt;/SPAN&gt;&lt;SPAN style="color: #bbb529;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;protected void &lt;/SPAN&gt;&lt;SPAN style="color: #ffc66d;"&gt;onDestroy&lt;/SPAN&gt;() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #cc7832;"&gt;super&lt;/SPAN&gt;.onDestroy()&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #9876aa;"&gt;mMapView&lt;/SPAN&gt;.dispose()&lt;SPAN style="color: #cc7832;"&gt;;
&lt;/SPAN&gt;&lt;SPAN style="color: #cc7832;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}
}&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also below is permissions I have included in the AndroidManifest.xml which I believe to be all that is required for offline map read/write access but I could be wrong.&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;SPAN style="color: #e8bf6a;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a; background-color: #344134;"&gt;uses-permission&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #9876aa;"&gt;android&lt;/SPAN&gt;&lt;SPAN style="color: #bababa;"&gt;:name=&lt;/SPAN&gt;&lt;SPAN style="color: #6a8759;"&gt;"android.permission.INTERNET" &lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;/&amp;gt;
&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a; background-color: #344134;"&gt;uses-permission&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #9876aa;"&gt;android&lt;/SPAN&gt;&lt;SPAN style="color: #bababa;"&gt;:name=&lt;/SPAN&gt;&lt;SPAN style="color: #6a8759;"&gt;"android.permission.ACCESS_WIFI_STATE"&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;/&amp;gt;
&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a; background-color: #344134;"&gt;uses-permission&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #9876aa;"&gt;android&lt;/SPAN&gt;&lt;SPAN style="color: #bababa;"&gt;:name=&lt;/SPAN&gt;&lt;SPAN style="color: #6a8759;"&gt;"android.permission.ACCESS_NETWORK_STATE" &lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;/&amp;gt;
&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a; background-color: #344134;"&gt;uses-permission&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #9876aa;"&gt;android&lt;/SPAN&gt;&lt;SPAN style="color: #bababa;"&gt;:name=&lt;/SPAN&gt;&lt;SPAN style="color: #6a8759;"&gt;"android.permission.ACCESS_FINE_LOCATION" &lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;/&amp;gt;
&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a; background-color: #344134;"&gt;uses-permission&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #9876aa;"&gt;android&lt;/SPAN&gt;&lt;SPAN style="color: #bababa;"&gt;:name=&lt;/SPAN&gt;&lt;SPAN style="color: #6a8759;"&gt;"android.permission.WRITE_EXTERNAL_STORAGE" &lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;/&amp;gt;
&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a; background-color: #344134;"&gt;uses-permission&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #9876aa;"&gt;android&lt;/SPAN&gt;&lt;SPAN style="color: #bababa;"&gt;:name=&lt;/SPAN&gt;&lt;SPAN style="color: #6a8759;"&gt;"android.permission.READ_EXTERNAL_STORAGE" &lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;/&amp;gt;
&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a; background-color: #344134;"&gt;uses-permission&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #9876aa;"&gt;android&lt;/SPAN&gt;&lt;SPAN style="color: #bababa;"&gt;:name=&lt;/SPAN&gt;&lt;SPAN style="color: #6a8759;"&gt;"android.permission.MAPS_RECEIVE" &lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;/&amp;gt;
&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a; background-color: #344134;"&gt;uses-permission&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #9876aa;"&gt;android&lt;/SPAN&gt;&lt;SPAN style="color: #bababa;"&gt;:name=&lt;/SPAN&gt;&lt;SPAN style="color: #6a8759;"&gt;"android.permission.ACCESS_COARSE_LOCATION"&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;/&amp;gt;
&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a; background-color: #344134;"&gt;uses-permission&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #9876aa;"&gt;android&lt;/SPAN&gt;&lt;SPAN style="color: #bababa;"&gt;:name=&lt;/SPAN&gt;&lt;SPAN style="color: #6a8759;"&gt;"com.google.android.providers.gsf.permission.READ_GSERVICES"&lt;/SPAN&gt;&lt;SPAN style="color: #e8bf6a;"&gt;/&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any assistance or suggestions would be greatly appreciated, in the meantime I will try load the sample app and try using it instead of my own application to see if I can find out anything more that I might of missed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Sample App: &lt;A class="link-titled" href="https://developers.arcgis.com/labs/android/create-a-basic-android-project.zip" title="https://developers.arcgis.com/labs/android/create-a-basic-android-project.zip" rel="nofollow noopener noreferrer" target="_blank"&gt;https://developers.arcgis.com/labs/android/create-a-basic-android-project.zip&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kind Regards,&lt;/P&gt;&lt;P&gt;Joel.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 12:46:59 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/issue-with-loading-mmpk-file-from-internal-storage/m-p/259715#M1694</guid>
      <dc:creator>JoelSmith-Lowe</dc:creator>
      <dc:date>2021-12-11T12:46:59Z</dc:date>
    </item>
    <item>
      <title>Re: Issue with loading .mmpk file from Internal Storage for Offline Use</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/issue-with-loading-mmpk-file-from-internal-storage/m-p/259716#M1695</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have resolved my issue !&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I had the code right, it was Android Permissions that was causing the issue.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Could someone from ArcGIS please add this to the tutorial posted above as this will really help early adopters that are developing. The tutorial is great but recent changes to the Android OS has made extra steps required which I have included a resolution below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Explanation of why issue occurs.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Beginning with Android 6.0 (API level 23) dangerous permissions need to be allowed by the user even if the manifest includes the required permission.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Resolution (without including code to prompt user for required permissions):&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Install App &amp;gt; Go to Settings &amp;gt; Search for App Permissions &amp;gt; Select Storage &amp;gt; Flick the switch to allow your app access.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 12 Apr 2018 03:54:11 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/issue-with-loading-mmpk-file-from-internal-storage/m-p/259716#M1695</guid>
      <dc:creator>JoelSmith-Lowe</dc:creator>
      <dc:date>2018-04-12T03:54:11Z</dc:date>
    </item>
  </channel>
</rss>

