User Tools

Site Tools


Sidebar

Privacy Policy

News

Version 2.50 is out since Jan 1st 2022


Frequently Asked Questions


Namespaces

Note for contributors

If you wish to create a new page in the DroidScript wiki, please click on the most appropriate namespace above and follow the notes for contributors there.

Because of spam, it has been necessary to add a CAPTCHA to the registration form and the save option for editing pages. You will not need to prove you are human if you are logged in, so please register.

Please feel free to improve any existing page, as well as adding new pages to increase the sum of public knowledge about DroidScript.

Formatting Syntax

sample_code:get_device_specs

Table of Contents

Get Device Specs

I have been asked more than once lately about the device on which I am testing code.

In order to produce some of the answers simply, I wrote a simple function getDeviceSpecs(). It occurred to me that this may be useful to others when reporting problems on the discussion groups.

Sample code

The sample app uses this function to display some specs and copy them to the clipboard, ready to pass elsewhere.

getDeviceSpecs.js
// https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels
var allBuilds = JSON.parse('{' +
  '"1":{"level":1,"codename":"(no code name)","version":"1.0"}, ' +
  '"2":{"level":2,"codename":"(no code name)","version":"1.1"} , ' +
  '"3":{"level":3,"codename":"Cupcake","version":"1.5"}, ' +
  '"4":{"level":4,"codename":"Donut","version":"1.6"}, ' +
  '"5":{"level":5,"codename":"Eclair","version":"2.0"},  ' +
  '"6":{"level":6,"codename":"Eclair","version":"2.0.1"}, ' +
  '"7":{"level":7,"codename":"Eclair","version":"2.1"}, ' +
  ' "8":{"level":8,"codename":"Froyo","version":"2.2.x"}, ' +
  ' "9":{"level":9,"codename":"Gingerbread","version":"2.3 - 2.3.2"}, ' +
  ' "10":{"level":10,"codename":"Gingerbread","version":"2.3.3 - 2.3.7"}, ' +
  ' "11":{"level":11,"codename":"Honeycomb","version":"3.0"}, ' +
  ' "12":{"level":12,"codename":"Honeycomb","version":"3.1"}, ' +
  ' "13":{"level":13,"codename":"Honeycomb","version":"3.2.x"}, ' +
  ' "14":{"level":14,"codename":"Ice Cream Sandwich","version":"4.0.1 - 4.0.2"}, ' +
  ' "15":{"level":15,"codename":"Ice Cream Sandwich","version":"4.0.3 - 4.0.4"}, ' +
  ' "16":{"level":16,"codename":"Jelly Bean","version":"4.1.x"}, ' +
  ' "17":{"level":17,"codename":"Jelly Bean","version":"4.2.x"}, ' +
  ' "18":{"level":18,"codename":"Jelly Bean","version":"4.3.x"}, ' +
  ' "19":{"level":19,"codename":"KitKat","version":"4.4 - 4.4.4"}, ' +
  ' "20":{"level":20,"codename":"K or L","version":"4 or 5"}, ' +
  ' "21":{"level":21,"codename":"Lollipop","version":"5.0"}, ' +
  ' "22":{"level":22,"codename":"Lollipop","version":"5.1"}, ' +
  ' "23":{"level":23,"codename":"MarshMallow","version":"6.0"}, ' +
  ' "24":{"level":24,"codename":"Nougat","version":"7.0"}, ' +
  ' "25":{"level":25,"codename":"Nougat","version":"7.1"}, ' +
  ' "26":{"level":26,"codename":"Oreo","version":"8.0"}, ' +
  ' "27":{"level":27,"codename":"Oreo","version":"8.1"}, ' +
  ' "28":{"level":28,"codename":"Pie","version":"9"}, ' +
  ' "29":{"level":29,"codename":"Q","version":"10"}, ' +
  ' "30":{"level":30,"codename":"R","version":"11"}, ' +
  ' "31":{"level":31,"codename":"S","version":"12"}, ' +
  ' "32":{"level":32,"codename":"S_V2","version":"12"} ' +
  ' }');
 
var osObj = allBuilds[app.GetOSVersion()]
try
{
  var osInfo = "Android " + osObj.version + " (" +
    osObj.codename + ")  API level " +
    osObj.level
}
catch(err){var osInfo = app.GetOSVersion();}
 
var lay, txt, scroller
//Called when application is started.
function OnStart()
{
  /*
  if(! app.GetNotifyId())
  {
    var notify = app.CreateNotification(  );
    notify.SetSmallImage( "Img/getDeviceSpecs.png" );
    notify.SetLargeImage( "Img/getDeviceSpecs.png" );
    notify.SetMessage( "",app.GetAppName(),"" );
    notify.Notify( app.GetAppName() );
  }
  */
  //Create a layout with objects vertically centered.
  lay = app.CreateLayout("linear", "VCenter,FillXY");
 
  // create viewr for specs
  scroller = app.CreateScroller(1, 0.8);
  var specs = getDeviceSpecs();
  txt = app.CreateText(specs, 1, 0.8, "left,multiLine");
  txt.SetPadding(0.02, 0.01, 0.02, 0.01);
  //txt.SetTextColor("#ff446666");
  scroller.AddChild(txt);
  lay.AddChild(scroller);
 
  //Create a button and add it to layout.
  var btn = app.CreateButton("[fa-copy]", -1, -1, "fontAwesome");
  btn.SetTextSize( 32 )
  //btn.SetTextColor("#ffddffff");
  //btn.SetStyle("#4285F4", "#2265d4", 2, "#999999", 0, 1, "#ff9000");
 
  btn.SetOnTouch(btn_OnTouch);
  lay.AddChild(btn);
 
  //Add layout to app.    
  app.AddLayout(lay);
  OnConfig()
}
 
function btn_OnTouch()
{
  app.SetClipboardText(txt.GetText( ) );
  app.ShowPopup("Copied to clipboard")
}
 
function getBuilderVersion()
{
   var msg = "Apk Builder plugin not installed";
   var path = app.GetPrivateFolder("Plugins") +
      "/apkbuilder/Version.txt"
   if(app.FileExists(path))
   {
      msg = "Apk Builder version " + app.ReadFile( path )
   }
   else if(app.IsAPK())
   {
      msg = "APK built with " + app.GetDSVersion().toFixed(2);
   }
   return msg
}
function getDeviceSpecs()
{
  var os = app.GetOSVersion();
  var model = app.GetModel();
  var tablet = app.IsTablet();
  var fromapk = app.IsAPK();
  var isChrome = app.IsChrome();
  var isPrem = app.IsPremium()
  var isTV = app.IsTV();
  var dsversion = app.GetDSVersion().toFixed(2);
  //Get screen dimensions. 
  var sw = app.GetScreenWidth();
  var sh = app.GetScreenHeight();
  var dens = app.GetScreenDensity();
  //Get display dimensions. 
  var dw = app.GetDisplayWidth();
  var dh = app.GetDisplayHeight();
  //Get drive details
  var intfld = app.GetInternalFolder();
  var extfld = app.GetExternalFolder();
  var intspace = app.GetFreeSpace("internal");
  var extspace = app.GetFreeSpace("external");
  var mem = app.GetMemoryInfo().total.toLocaleString("en-US");
 
  //specs are formatted as a comment so we can paste
  //them somewhere convenient
  try
  {
    os = osInfo;
  }
  catch(err)
  {}
  var s = "/*\n" +
    "os=" + os + "\n" +
    getBuilderVersion() + "\n" +
    "tablet=" + tablet + "\n" +
    "model=" + model + "\n" +
    "isChrome=" + isChrome + "\n" +
    "isTV=" + isTV +"\n" +
    "DroidScript=" + dsversion + "\n" +
    "Storage access=" + storageScoped() + "\n" +
    "screen width=" + sw + "\n" +
    "screen height=" + sh + "\n" +
    "screen density=" + dens + "\n" +
    "display width=" + dw + "\n" +
    "display height=" + dh + "\n" +
    "internal folder=" + intfld + "\n" +
    "external folder=" + extfld + "\n" +
    "int free space=" + intspace + "\n" +
    "ext free space=" + extspace + "\n" +
    "memory=" + mem +"\n" +
    "premium=" + isPrem +"\n" +
    "country code=" + app.GetCountryCode() + "\n" +
    "country=" + app.GetCountry() + "\n" +
    "language code=" + app.GetLanguageCode() + "\n" +
    "language=" + app.GetLanguage() + "\n" +
    "wifi=" + app.GetIPAddress() + "\n" +
    "userAgent='" + navigator.userAgent + "'\n" +
    "*/";
  return(s);
}
 
function storageScoped() {
   return app.IsScoped()?"Scoped":"Traditional"
}
 
function OnConfig()
{
//called when screen rotates
//also called at startup to fix Chromebook display size anomaly
	 var fixwid=lay.GetAbsWidth()/app.GetDisplayWidth()
	 var fixhigh=lay.GetAbsHeight()/app.GetDisplayHeight()
	 var wid=1, high=0.8
	 if(fixwid<1) wid *= fixwid // chromebook not using full width
	 if(fixhigh<1) high *= fixhigh // or height
	 scroller.SetSize( wid,high )
	 txt.SetSize( wid, high  )
}

Notes

The function getDeviceSpecs at the end of the code, can be pasted independently into a project an the string returned can be used however you see fit.

sample_code/get_device_specs.txt · Last modified: 2022/04/25 17:48 by stevegarman