POST
|
Hi Jamie, I did post a reply, but, I subsequently deleted after rereading this entire thread. My initial impression was (and still is), there is something wrong with the Comodo CA root and/or the certificate chain. However, such issues should be reproducible when browsing via your Android device's browser, which, you've indicated is okay. I will do some investigations here. Stephen
... View more
09-12-2018
04:02 PM
|
0
|
1
|
6957
|
BLOG
|
Summary Consider a project which uses a SQLite database. Over time requirements changes. We may be forced to change the schema of that SQLite database. Unlike other RDBMS, SQLite doesn't allow you to add, modify or delete columns in a table after a table is created. You will be required to export the data, recreate the schema, then import the data. Such data migration exercises requires scripts to be built with attention to detail to ensure there is no data loss during data migration. You can future proof your schema by storing data as JSON. AppStudio's SqlScalarFunction helps optimize the use of JSON. Scenario You've been tasked with creating a Geographic Quiz app. Version 1 will ship with a set of countries and we want to quiz the user their knowledge of capitals. Version 2 will ship with population and we want to quiz the user to rank countries in order. Version 3 will ship with currency conversion quiz. Initial App The following is a sample app which is an initial implementation of Version 1. We will deconstruct this app and explore how it could handle the future requirements. import QtQuick 2.7
import ArcGIS.AppFramework 1.0
import ArcGIS.AppFramework.Sql 1.0
Item {
property FileFolder sqlFolder: FileFolder { path: "~/ArcGIS/Data/Sql" }
ListView {
id: listView
anchors.fill: parent
anchors.margins: 10
delegate: Row { spacing: 10; Text { text: name } Text { text: capital } }
}
SqlDatabase {
id: db
databaseName: sqlFolder.filePath('countries.sqlite')
SqlScalarFunction {
name: 'json_value'
method: function (json_text, key) { return json_text ? JSON.parse(json_text)[key] : null; }
}
}
Component.onCompleted: {
db.open();
db.query("DROP TABLE IF EXISTS countries ");
db.query("CREATE TABLE IF NOT EXISTS countries (json_text TEXT)");
db.query("CREATE INDEX countries_name ON countries ( json_value(json_text, 'name') COLLATE NOCASE )");
db.query("INSERT INTO countries VALUES (:json_text)", { json_text: '{"name":"United States", "capital":"Washington D.C."}'} );
db.query("INSERT INTO countries VALUES (:json_text)", { json_text: '{"name":"Australia", "capital":"Canberra", "population": 24130000}'} );
db.query("INSERT INTO countries VALUES (:json_text)", { json_text: '{"name":"France", "capital":"Paris"}'} );
var sql = [
"SELECT json_value(json_text, 'name') as name, ",
" json_value(json_text, 'capital') as capital ",
"FROM countries ",
"WHERE name like 'United%' "
].join("\n");
listView.model = db.queryModel(sql);
}
} Schema You see the schema for our app is simply: CREATE TABLE countries
(
json_text TEXT
) In Version 1, we want json_text to be a JSON string with the country's name and capital defined. To preview Version 2 one of the records already has population defined as well. Unpacking JSON with SqlScalarFunction We have a SqlScalarFunction defined which implements: function json_value(json_text, key)
{
return json_text ? JSON.parse(json_text)[key] : null;
} So that `SQLite` can use this to unpack a JSON string and retrieve a value by its key. Indexing and Querying SQLite allows one to create indexes on expressions. This means we can create an index on a key extracted from the JSON string. This feature is incredible. It means we are effectively caching an extracted value so that means we can avoid repeated calculation. CREATE INDEX countries_name ON countries ( json_value(json_text, 'name') COLLATE NOCASE );
SELECT json_value(json_text, 'name') AS name,
json_value(json_text, 'capital') AS capital
FROM countries
WHERE name LIKE 'United%'; When you check the query with `EXPLAIN QUERY PLAN` we see that it is using the index: EXPLAIN QUERY PLAN
SELECT json_value(json_text, 'name') AS name,
json_value(json_text, 'capital') AS capital
FROM countries
WHERE name LIKE 'United%';
SEARCH TABLE countries USING INDEX countries_name (<expr>>? AND <expr><?) Note that a collating sequence must be specified else `LIKE` where clauses will yield a full table scan. Planning When planning for Versions 2 and Versions 3 of the app, you'll appreciate that we can reuse the existing SQLite database and just add or update records within. We can easily drop / create indexes to accommodate new fields and new app requirements.
... View more
08-21-2018
03:17 PM
|
3
|
1
|
40963
|
BLOG
|
1. Introduction This AppStudio blog describes how we can use the Networking component to detect for network connectivity and classify the type of network (LAN, WIFI, Mobile Data). This allows you to build apps that can react differently dependent on what type of network they're on, e.g. ask the user whether they want to download content whilst on an expensive mobile data network. 2. Minimal App - All Network Configurations Let's start with a minimal app that shows all Network connections whether active or inactive: import QtQuick 2.7
import QtQuick.Controls 2.1
import ArcGIS.AppFramework 1.0
import ArcGIS.AppFramework.Networking 1.0
App {
width: 640 * AppFramework.displayScaleFactor
height: 480 * AppFramework.displayScaleFactor
Flickable {
anchors.fill: parent
contentWidth: textArea.width
contentHeight: textArea.height
TextArea {
id: textArea
text: JSON.stringify(Networking.configurations, undefined, 2)
}
}
} On my Windows machine, I get: {
"0": {
"objectName": "",
"valid": true,
"name": "vEthernet (Internal Ethernet Port Windows Phone Emulator Internal Switch) 2",
"identifier": "312537767",
"bearerType": 1,
"bearerTypeFamily": 1,
"bearerTypeName": "Ethernet",
"configurationType": 0,
"connectTimeout": 30000,
"purpose": 0,
"roamingAvailable": false,
"state": 14
},
"1": {
"objectName": "",
"valid": true,
"name": "vEthernet (VMware Virtual Ethernet Adapter for VMnet8 Virtual Switch)",
"identifier": "287176532",
"bearerType": 1,
"bearerTypeFamily": 1,
"bearerTypeName": "Ethernet",
"configurationType": 0,
"connectTimeout": 30000,
"purpose": 0,
"roamingAvailable": false,
"state": 14
},
"2": {
"objectName": "",
"valid": true,
"name": "vEthernet (Default Switch)",
"identifier": "287176527",
"bearerType": 1,
"bearerTypeFamily": 1,
"bearerTypeName": "Ethernet",
"configurationType": 0,
"connectTimeout": 30000,
"purpose": 0,
"roamingAvailable": false,
"state": 14
},
"3": {
"objectName": "",
"valid": true,
"name": "vEthernet (VMware Virtual Ethernet Adapter for VMnet1 Virtual Switch)",
"identifier": "312537825",
"bearerType": 1,
"bearerTypeFamily": 1,
"bearerTypeName": "Ethernet",
"configurationType": 0,
"connectTimeout": 30000,
"purpose": 0,
"roamingAvailable": false,
"state": 14
},
"4": {
"objectName": "",
"valid": true,
"name": "Bluetooth Network Connection",
"identifier": "312537798",
"bearerType": 1,
"bearerTypeFamily": 1,
"bearerTypeName": "Ethernet",
"configurationType": 0,
"connectTimeout": 30000,
"purpose": 0,
"roamingAvailable": false,
"state": 2
},
"5": {
"objectName": "",
"valid": true,
"name": "vEthernet (Intel(R) 82579LM Gigabit Network Connection Virtual Switch)",
"identifier": "312537802",
"bearerType": 1,
"bearerTypeFamily": 1,
"bearerTypeName": "Ethernet",
"configurationType": 0,
"connectTimeout": 30000,
"purpose": 0,
"roamingAvailable": false,
"state": 14
}
} The things we observed about Networking.configurations are: it's an object, not an array, every connection is listed (both active and inactive) there are signals on Network.configurations so you can use it in property binding scenarios (i.e. the moment the network changes, e.g. device is put in airplane mode, your app automatically updates) 3. Active Network Configurations In order to filter the list down quickly, we transform the object to an array, then filter the results using Array.prototype.filter: import QtQuick 2.7
import QtQuick.Controls 2.1
import ArcGIS.AppFramework 1.0
import ArcGIS.AppFramework.Networking 1.0
App {
width: 640 * AppFramework.displayScaleFactor
height: 480 * AppFramework.displayScaleFactor
Flickable {
anchors.fill: parent
contentWidth: textArea.width
contentHeight: textArea.height
TextArea {
id: textArea
text: JSON.stringify(
toArray(Networking.configurations)
.filter(isConfigActive)
.map(summary),
undefined, 2)
}
}
function toArray(o) {
return Object.keys(o).map(function (e) { return o[e]; } );
}
function isConfigActive(c) {
return (c.state & NetworkConfiguration.StateActive) === NetworkConfiguration.StateActive;
}
function summary(c) {
return {
name: c.name,
bearerType: c.bearerType
};
}
}
On my Windows machine, this reduces to an easier to read list: [
{
"bearerType": 1,
"name": "vEthernet (Internal Ethernet Port Windows Phone Emulator Internal Switch) 2"
},
{
"bearerType": 1,
"name": "vEthernet (VMware Virtual Ethernet Adapter for VMnet1 Virtual Switch)"
},
{
"bearerType": 1,
"name": "vEthernet (Default Switch)"
},
{
"bearerType": 1,
"name": "vEthernet (Intel(R) 82579LM Gigabit Network Connection Virtual Switch)"
},
{
"bearerType": 1,
"name": "vEthernet (VMware Virtual Ethernet Adapter for VMnet8 Virtual Switch)"
}
] On my Android device, when WIFI is enabled: [
{
"bearerType": 2,
"name": "WIFI"
}
] or, when Mobile Data is enabled: [
{
"bearerType": 10,
"name": "Mobile"
}
] On my iOS device, when WIFI is enabled: [
{
"bearerType": 0,
"name": "en0"
},
{
"bearerType": 0,
"name": "awdl0"
},
{
"bearerType": 0,
"name": "utun0"
}
] 4. Determining if the Network is LAN, WIFI or MobileData On Windows, Android and Linux the bearerType can be used to classify the network connection, e.g. NetworkConfiguration.BearerEthernet NetworkConfiguration.BearerWLAN NetworkConfiguraiton.Bearer3G Whilst on iOS and macOS, the bearerType may not be provided by the operating system resulting in NetworkConfiguration.BearerUnknown. To cover iOS and macOS, we note that the name of the configuration instead: en0 awdl0 pdp_ip0 function isConfigLAN(c) {
if (c.bearerType === NetworkConfiguration.BearerEthernet) {
return true;
}
if (Qt.platform.os === "osx") {
return c.name === "en0";
}
return false;
}
function isConfigWIFI(c) {
if (c.bearerType === NetworkConfiguration.BearerWLAN) {
return true;
}
if (Qt.platform.os === "ios") {
return c.name === "en0";
}
if (Qt.platform.os === "osx") {
return c.name === "awdl0";
}
return false;
}
function isConfigMobileData(c) {
switch (c.bearerType) {
case NetworkConfiguration.Bearer2G:
case NetworkConfiguration.BearerCDMA2000:
case NetworkConfiguration.BearerWCDMA:
case NetworkConfiguration.BearerHSPA:
case NetworkConfiguration.BearerWiMAX:
case NetworkConfiguration.BearerEVDO:
case NetworkConfiguration.BearerLTE:
case NetworkConfiguration.Bearer3G:
case NetworkConfiguration.Bearer4G:
return true;
}
if (Qt.platform.os === "ios") {
return c.name === "pdp_ip0";
}
return false;
}
function isConfigActiveLAN(c) {
return isConfigActive(c) && isConfigLAN(c);
}
function isConfigActiveWIFI(c) {
return isConfigActive(c) && isConfigWIFI(c);
}
function isConfigActiveMobileData(c) {
return isConfigActive(c) && isConfigMobileData(c);
}
Now that we have these useful functions, we can quickly chain them together to determine whether we're on WIFI or MobileData. Because we convert the object to an array, we can make use of Array.prototype.some to quickly lookup a network configuration of a particular type: property var config: toArray(Networking.configurations)
property bool isOnline: isLAN || isWIFI || isMobileData
property bool isLAN: config.some(isConfigActiveLAN)
property bool isWIFI: config.some(isConfigActiveWIFI)
property bool isMobileData: config.some(isConfigActiveMobileData)
property bool isMobileDataOnly: isMobileData && !isWIFI && !isLAN 5. Network Check Sample The "Network Check" app is available for you to try which demonstrates all of the above points. You can find "Network Check" app in AppStudio. Launch AppStudio Select New App Click Search Icon Type: Network Check The "Network Check" source code is also avilable at arcgis-appstudio-samples GitHub.
... View more
06-19-2018
02:09 PM
|
4
|
0
|
796
|
POST
|
Hi Paul, AppStudio attempts to do your entire file upload in a single REST API call. However, due to the speed of your internet connection, combined with the size of the file, that request will take a significant measurable time. For instance, let's assume you're on a 200kbps connection. The upload would take more than an hour. The ArcGIS Online REST API could terminate the request due to a number of reasons: it didn't receive your file attachment in the time allotted, or it did receive the file, but, it didn't have sufficient time to give you a response. I would guess that you're triggering the former. AppStudio has no choice but reflect on the error response we got from ArcGIS Online. If ArcGIS Online believes that it didn't receive your file, then, AppStudio has no choice to echo that fact. There are a number of solutions to this problem: 1. if you cannot repair your internet speed (i.e. your app must function in an environment that has poor internet connectivity), then, you can consider using a middleman proxy server that could cache your request. As far as ArcGIS Online is concerned, it will see the request originating from the proxy server, and, we would hope that proxy server is hosted on a fast internet. 2. we can consider redesign the upload to occur in a multipart upload request, however, each part would be subject to the same REST API thresholds, i.e. they could terminate if any part could not be delivered in a timely manner - some real world scenarios would really help us understand how to tune AppStudio for such scenarios. You just have to ensure that your proxy server has sufficiently large timeouts to receive your file so that it can relay it. Hope this makes sense. Stephen
... View more
04-22-2018
09:29 PM
|
0
|
1
|
804
|
POST
|
Hi Paul, For a cross platform solution, yeah, you're pretty much restricted to REST API end points. For that, we generally recommend either XMLHttpRequest or, AppStudio's NetworkRequest which has support for downloading blobs to files. If you know you're running on Windows, you can consider using Simba's ODBC Drivers with the SqlDatabase to connect: // MongoDB ODBC sample
SqlDatabase {
driverName: "QODBC"
databaseName: "Driver=Simba MongoDB ODBC Driver;Server=[ServerInfo];
Port=[PortNumber];Database=[MongoDBDatabase];"
}
// DynamoDB ODBC sample
SqlDatabase {
driverName: "QODBC"
databaseName: "Driver=SimbaDynamoDB ODBC Driver;
Host=dynamodb.us-west-2.amazonaws.com;Region=us-west-2;
AuthMechanism=1;CredentialFile=C:\credentials.txt;
ProfileName=simba;"
}
References: https://gist.github.com/search?utf8=%E2%9C%93&q=%40stephenquan+appstudio+sqldatabase+drivername&ref=searchresults https://www.simba.com/products/MongoDB/doc/ODBC_InstallGuide/win/content/odbc/m2/strings.htm https://www.simba.com/products/DynamoDB/doc/ODBC_InstallGuide/win/content/odbc/dy/strings.htm Stephen
... View more
04-02-2018
08:08 PM
|
0
|
0
|
480
|
POST
|
Ikbel, In my previous answer, I supplied a complete working code snippet. Please use it in a standalone app with a `readme.txt` resource. The code snippet explains how to copy from resource (i.e. source) to file system (i.e. dest) and opens the file. Stephen
... View more
02-28-2018
08:23 PM
|
0
|
1
|
896
|
POST
|
Hi Ikbel, what you're describing is actually by design. When you create and run an app from within AppStudio Desktop, all your source files both your .qml, .txt and .doc files resides on disk. You can referred to them with relative references which is why you can open .txt and .doc files with relative links in your app since your app will translate the relative references to absolute references to files to your disk as it opens. However, the trap is, if you build your app using App Make, all your source files will be compiled and deployed with your app as a Qt Resource File (i.e. qrc). Most of Qt's components, will recognize both relative references to disk or Qt Resource File indifferently. For instance, if your app has .png images, you can use the Image component to display them. However, if your app is wanting to supply a relative reference to an external process, i.e. for Windows to open, you need to use the FileFolder component to copy the files from a resource to a disk. If you don't, Windows will not have a clue what to do. import QtQuick 2.7
import QtQuick.Controls 2.1
import ArcGIS.AppFramework 1.0
App {
id: app
width: 400
height: 640
Button {
text: qsTr("Copy and Open")
onClicked: {
dest.removeFile("readme.txt");
dest.copyFile(source.filePath("readme.txt"), dest.filePath("readme.txt"))
Qt.openUrlExternally(dest.fileUrl("readme.txt"));
}
}
FileFolder {
id: source
url: "."
}
FileFolder {
id: dest
path: "~"
}
}
Hope that makes sense. Stephen
... View more
02-27-2018
08:22 PM
|
0
|
3
|
896
|
POST
|
Hi Anna, Sounds like some troubleshooting is required. Here's two techniques. 1) Chopping technique Make a backup of the APM, then, start chopping XML tags away from it in a step-by-step fashion until you end up with a barebones APM. At one point it should open, then, you should narrow down the "last thing" that caused it to change from crashing to not crashing. 2) Additive technique Create a blank new APM, then, start adding XML tags from the APM that doesn't work in a step-by-step fashion, until you end up with the original APM. At one point, the APM should stop opening, then, you should narrow down the "last thing" that caused it to change from not crashing to crashing. Once you've isolated the line, this would provide us with further information as to what is going on. Stephen
... View more
02-25-2018
04:29 PM
|
0
|
1
|
623
|
POST
|
Diallo, Please do not change the GPS Protocol's projection. I will explain why, shortly, but, the GPS protocol should be in D_WGS_1984, and, only in special circumstances, should you change this. Since you mentioned you are using ArcPad Data Manager to check out your data from ArcGIS Desktop to ArcPad, ArcPad should be loading your data in the correct projection. You need to check that your map projection of your map in ArcGIS Desktop is correct. Optionally, you need to ensure that the data sources in your map are also in the correct projection - it's optional, because checkout will reproject on check out and will reproject on check in. ArcPad when dealing with projection: 1. When there's no data loaded, by default, it's in WGS84 2. If there is a projection defined in your ArcPad Map Project (.apm), it will use it, otherwise 3. When you load data, projection will adapt to the *FIRST* dataset loaded, so, you need to add a feature class, like a Shapefile or AXF of data in your projection 4. When you load more data, the projection will only adapt to secondary datasets, if the primary datasets were deemed reprojectable, e.g. redlining layers and ArcGIS Online basemaps are examples of reprojectable layers, otherwise, the projection will lock onto the primary dataset and attempt to reproject secondary datasets to it ArcPad has a projection library but it only invokes it in the following scenarios: - reprojecting ArcGIS Online basemaps to your map - reprojecting GPS coordinates to your map - reprojecting redlining layer to your map The GPS Datum must be left as D_WGS_1984 so that the reprojection library can reproject GPS coordinates correctly onto your map. Some special GPS hardware allow you to change the GPS datum, and, only in that circumstances, should you change the GPS Datum in ArcPad to match your GPS hardware. i.e. this setting has nothing to do with your desired map's projection. You mentioned that you're having an issue with ArcPad on your Trimble Juno 3D. Can you elaborate more details to the circumstances of your issue and what you've attempted to do to fix it? i.e. do you try loading your data on ArcPad on Windows? Did it work? Did you see the same problem? i.e. I want to know if your problem is specific to your Trimble Juno, or, if your problem is a general ArcPad issue. Stephen
... View more
02-18-2018
01:13 PM
|
3
|
0
|
419
|
POST
|
Creating a Feature Service is done in two steps: ArcGIS REST API - Create Service ArcGIS REST API - Add To Definition Here is the sample parameters for Create Service: {
"name": "tracklog_101",
"serviceDescription": "Tracklog 101 (04-Jan-2018 8:30 AM)",
"currentVersion":10.3,
"hasVersionedData":false,
"supportsDisconnectedEditing":false,
"hasStaticData":false,
"maxRecordCount":1000,
"supportedQueryFormats":"JSON",
"capabilities":"Query,Editing,Create,Update,Delete",
"description":"",
"copyrightText":"",
"allowGeometryUpdates":true,
"units":"esriMeters",
"syncEnabled":false,
"editorTrackingInfo":{
"enableEditorTracking":false,
"enableOwnershipAccessControl":false,
"allowOthersToUpdate":true,
"allowOthersToDelete":true
},
"xssPreventionInfo":{
"xssPreventionEnabled":true,
"xssPreventionRule":"InputOnly",
"xssInputRule":"rejectInvalid"
},
"tables":[
],
"_ssl":false
}
Here is a sample parameters for Add To Definition: {
"layers": [
{
"adminLayerInfo": {
"geometryField": {
"name": "geometry",
"srid": 4326
}
},
"allowGeometryUpdates": true,
"capabilities": "Query,Editing,Create,Update,Delete",
"copyrightText": "",
"defaultVisibility": true,
"description": "",
"displayField": "",
"drawingInfo": {
"labelingInfo": null,
"renderer": {
"description": "Tracklog",
"label": "Tracklog",
"symbol": {
"angle": 0,
"color": [
255,
0,
0,
255
],
"outline": {
"color": [
255,
255,
0,
255
],
"width": 1
},
"size": 8,
"style": "esriSMSCircle",
"type": "esriSMS",
"xoffset": 0,
"yoffset": 0
},
"type": "simple"
},
"transparency": 0
},
"extent": {
"spatialReference": {
"wkid": 4326
},
"type": "extent",
"xmax": 180,
"xmin": -180,
"ymax": 90,
"ymin": -90
},
"fields": [
{
"alias": "ObjectID",
"defaultValue": null,
"domain": null,
"editable": false,
"name": "objectid",
"nullable": false,
"type": "esriFieldTypeOID"
},
{
"alias": "GlobalID",
"defaultValue": null,
"domain": null,
"editable": false,
"length": 38,
"name": "globalid",
"nullable": false,
"sqlType": "sqlTypeGUID",
"type": "esriFieldTypeGlobalID"
},
{
"alias": "Latitude",
"domain": null,
"editable": true,
"name": "latitude",
"nullable": true,
"type": "esriFieldTypeDouble"
},
{
"alias": "Longitude",
"domain": null,
"editable": true,
"name": "longitude",
"nullable": true,
"type": "esriFieldTypeDouble"
},
{
"alias": "Altitude",
"domain": null,
"editable": true,
"name": "altitude",
"nullable": true,
"type": "esriFieldTypeDouble"
},
{
"alias": "Easting",
"domain": null,
"editable": true,
"name": "easting",
"nullable": true,
"type": "esriFieldTypeDouble"
},
{
"alias": "Northing",
"domain": null,
"editable": true,
"name": "northing",
"nullable": true,
"type": "esriFieldTypeDouble"
},
{
"alias": "UTC Date & Time",
"domain": null,
"editable": true,
"name": "utcdatetime",
"nullable": true,
"type": "esriFieldTypeDate"
},
{
"alias": "UTC Date",
"domain": null,
"editable": true,
"name": "utcdate",
"nullable": true,
"type": "esriFieldTypeDate"
},
{
"alias": "UTC Time",
"domain": null,
"editable": true,
"length": 20,
"name": "utctime",
"nullable": true,
"type": "esriFieldTypeString"
},
{
"alias": "Sentence",
"domain": null,
"editable": true,
"length": 255,
"name": "sentence",
"nullable": true,
"type": "esriFieldTypeString"
}
],
"geometryType": "esriGeometryPoint",
"globalIdField": "globalid",
"hasAttachments": true,
"hasM": false,
"hasStaticData": false,
"hasZ": false,
"htmlPopupType": "esriServerHTMLPopupTypeAsHTMLText",
"id": 0,
"isDataVersioned": false,
"maxRecordCount": 1000,
"maxScale": 0,
"minScale": 0,
"name": "Tracklog",
"objectIdField": "objectid",
"relationships": [],
"supportedQueryFormats": "JSON",
"supportsAdvancedQueries": true,
"supportsRollbackOnFailureParameter": true,
"supportsStatistics": true,
"templates": [],
"type": "Feature Layer",
"typeIdField": "",
"types": [],
"indexes": [
{
"description": "GlobalID index",
"fields": "globalid",
"isAscending": false,
"isUnique": true,
"name": "GlobalIDIndex"
}
]
}
]
}
... View more
01-03-2018
01:35 PM
|
0
|
0
|
606
|
POST
|
Thanks Faith, I'm glad that you have a positive result! Hmm, so a device reset did the fix. I wonder if you could have done that yourself? ArcPad has an "undocumented" feature to perform a system reset of a windows mobile device. Add Run Script command to Favourites: 1. Hit tiny triangle drop down on the far right 2. Toolbars > Toolbar Settings ... 3. Select Favourites tab 4. Locate Run Script tool and check it 5. Click Ok 6. Allow ArcPad to restart Reboot your device using Run Script tool 1. Type "System.Reboot" this will test a soft reset without losing anything and build your confidence with using this technique 2. Repeat the process but, this time, "System.Reboot true", this will trigger a clean reset, and, on some devices can lead to a factory reset. Stephen
... View more
12-21-2017
12:52 PM
|
1
|
1
|
299
|
POST
|
You need to start the location display and, for niceness you may also wish to turn on autopan. One way to do it as via adding Component.onCompleted near the bottom of your app as follows: Controls.DescriptionPage{
id:descPage
visible: false
}
// ----8<---- BEGIN SNIPPET ----8<----
Component.onCompleted: {
mapView.locationDisplay.autoPanMode = Enums.LocationDisplayAutoPanModeRecenter;
mapView.locationDisplay.start();
}
// ---->8---- END SNIPPET ---->8----
}
... View more
12-20-2017
08:57 PM
|
0
|
0
|
639
|
POST
|
This is moving to the "weird" territory. The things I'd be troubleshooting would be: - Amount of memory (RAM) available; get this info from the OS - Amount of memory (Storage) available; get this info from the OS - Whether ArcPad installed properly; perhaps view in File Explorer and browse and compare folders against an ArcPad that works (e.g. ArcPad on Windows) - Whether ArcPad extensions are loading properly; About ArcPad > System Information Hopefully you may be able to get some leads from the above. If not, well, I hate to be that software engineer and say it's a hardware problem, but, it is starting to look that way.
... View more
11-20-2017
03:08 PM
|
0
|
3
|
930
|
POST
|
Hi Faith, perhaps you can provide more details to help troubleshoot further. Let's begin by the filenames themselves. I'm particularly interested in file extensions. I'm expecting it to be .sid.
... View more
11-15-2017
01:01 PM
|
0
|
5
|
930
|
Title | Kudos | Posted |
---|---|---|
1 | 03-13-2023 08:11 PM | |
2 | 02-21-2023 07:29 PM | |
1 | 06-19-2019 05:33 PM | |
1 | 06-19-2019 01:00 AM | |
1 | 02-02-2016 03:09 PM |
Online Status |
Offline
|
Date Last Visited |
3 weeks ago
|