Ti-Android-RequestStoragePermission icon indicating copy to clipboard operation
Ti-Android-RequestStoragePermission copied to clipboard

Request Android Storage Permission for Titanium SDK 5.1.0+

Request Android Storage Permission for Titanium SDK 5.1.0+

Description

for Titanium SDK 5.1.0.GA+ & Android 6.0+

  • After 5.4.0, can use Ti.FileSystem.hasStoragePermissions/requestStoragePermissions()
  • But, settingsOpen() is still useful.
  • v0.2.0 for Ti SDK 5.4.0.GA+ / v0.1.2 for Ti SDK 5.1.0.GA~5.3.1.GA

Accessing the ti-android-requeststoragepermission Module

To access this module from JavaScript, you would do the following:

var ti_android_requeststoragepermission = require("com.boxoutthinkers.reqstorageperm");

The ti_android_requeststoragepermission variable is a reference to the Module object.

Method

1. hasStoragePermission();

2. requestStoragePermissions(e);

3. settingsOpen();
	- Application's setting page open in Android's Setting(System).

Reference

from Titanium SDK https://github.com/appcelerator/titanium_mobile/blob/5_2_X/android/modules/media/src/java/ti/modules/titanium/media/MediaModule.java

Usage

It's work on controller after window opend. (index.js or another controller, but not alloy.js)

// request storage permission
function checkPermissions(callback) {
  // request storage permission
  if (OS_ANDROID) {
    var RSP = require("com.boxoutthinkers.reqstorageperm");

    var ownedPermission = function() {
      // done
      callback && callback();
    };

    var requestStoragePerm = function() {
      if (!RSP.hasStoragePermission()) {
        RSP.requestStoragePermissions(function (e) {
          if (e.success) {
            // success
            Ti.API.info('requestStoragePermission : success');
            ownedPermission();
          } else {
            // retry or settings open
            Ti.API.error('requestStoragePermission : error');
            var dialog = Ti.UI.createAlertDialog({
              message: msg,
              cancel: 1,
              buttonNames: ["OK", "Open Setting"],
              title: "Need Storeage Permission"
            });
            dialog.addEventListener('click', function(e){
              if (e.index === e.source.cancel){
                Ti.API.debug('settings open');
                var resumedFn = function() {
                  requestStoragePerm();
                  Ti.Android.currentActivity.onStart = null;
                  Ti.Android.currentActivity.onResume = null;
                };
                Ti.Android.currentActivity.onStart = resumedFn;
                Ti.Android.currentActivity.onResume = resumedFn;

                // settings open
                RSP.settingsOpen();
              } else {
                requestStoragePerm();
              }
            });
            dialog.show();
          }
        });
      } else {
        Ti.API.info('requestStoragePermission : already have');
        ownedPermission();
      }
    };

    var checkNRequestStoragePerm = function () {
      if (!RSP.hasStoragePermission()) {
        var dialog = Ti.UI.createAlertDialog({
          message: "Need Storeage Permisson. Because, .......",
          ok: "OK",
          title: "Need Storeage Permission"
        });
        dialog.addEventListener('click', function(e){
          requestStoragePerm();
        });
        dialog.show();
      } else {
        Ti.API.info('requestStoragePermission : already have');
        ownedPermission();
      }
    };

    // do check
    checkNRequestStoragePerm();
  } else {
    // non android
    callback && callback();
  }
}

// run
checkPermissions(function callback() {...});

Author

Dongwoo Gim, BOXOUT THINKERS

License

MIT License