You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by bo...@apache.org on 2015/10/28 20:01:52 UTC
[2/3] cordova-plugin-media git commit: Adding the media permissions
code
Adding the media permissions code
Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-media/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-media/commit/c4547c94
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-media/tree/c4547c94
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-media/diff/c4547c94
Branch: refs/heads/master
Commit: c4547c94c5850c619b0936551ec1180f4465a95b
Parents: ec1e9ba
Author: Joe Bowser <bo...@apache.org>
Authored: Thu Sep 24 15:46:24 2015 -0700
Committer: Joe Bowser <bo...@apache.org>
Committed: Wed Oct 28 12:01:42 2015 -0700
----------------------------------------------------------------------
src/android/AudioHandler.java | 88 +++++++++++++++++++++++++++++++++++++-
1 file changed, 86 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-plugin-media/blob/c4547c94/src/android/AudioHandler.java
----------------------------------------------------------------------
diff --git a/src/android/AudioHandler.java b/src/android/AudioHandler.java
index f06b75a..49031c6 100644
--- a/src/android/AudioHandler.java
+++ b/src/android/AudioHandler.java
@@ -22,11 +22,15 @@ import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CordovaResourceApi;
+import android.Manifest;
import android.content.Context;
+import android.content.pm.PackageManager;
import android.media.AudioManager;
import android.net.Uri;
+import android.os.Build;
import android.util.Log;
+import java.security.Permission;
import java.util.ArrayList;
import org.apache.cordova.PluginResult;
@@ -55,6 +59,12 @@ public class AudioHandler extends CordovaPlugin {
private int origVolumeStream = -1;
private CallbackContext messageChannel;
+
+ public static final int PERMISSION_DENIED_ERROR = 20;
+
+ private String recordId;
+ private String fileUriStr;
+
/**
* Constructor.
*/
@@ -63,6 +73,41 @@ public class AudioHandler extends CordovaPlugin {
this.pausedForPhone = new ArrayList<AudioPlayer>();
}
+ protected int checkWritePermission()
+ {
+ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
+ {
+ return cordova.getActivity().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ }
+ else
+ {
+ return PackageManager.PERMISSION_GRANTED;
+ }
+ }
+
+ protected void getWritePermission(int requestCode)
+ {
+ cordova.requestPermission(this, requestCode, Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ }
+
+ protected int checkMicrophone()
+ {
+ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
+ {
+ return cordova.getActivity().checkSelfPermission(Manifest.permission.RECORD_AUDIO);
+ }
+ else
+ {
+ return PackageManager.PERMISSION_GRANTED;
+ }
+ }
+
+ protected void getMicPermission(int requestCode)
+ {
+ cordova.requestPermission(this, requestCode, Manifest.permission.RECORD_AUDIO);
+ }
+
+
/**
* Executes the request and returns PluginResult.
* @param action The action to execute.
@@ -73,18 +118,19 @@ public class AudioHandler extends CordovaPlugin {
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
CordovaResourceApi resourceApi = webView.getResourceApi();
PluginResult.Status status = PluginResult.Status.OK;
+ messageChannel = callbackContext;
String result = "";
if (action.equals("startRecordingAudio")) {
+ recordId = args.getString(0);
String target = args.getString(1);
- String fileUriStr;
try {
Uri targetUri = resourceApi.remapUri(Uri.parse(target));
fileUriStr = targetUri.toString();
} catch (IllegalArgumentException e) {
fileUriStr = target;
}
- this.startRecordingAudio(args.getString(0), FileHelper.stripFileProtocol(fileUriStr));
+ promptForRecord();
}
else if (action.equals("stopRecordingAudio")) {
this.stopRecordingAudio(args.getString(0));
@@ -407,4 +453,42 @@ public class AudioHandler extends CordovaPlugin {
messageChannel.sendPluginResult(pluginResult);
}
}
+
+ public void onRequestPermissionResult(int requestCode, String[] permissions,
+ int[] grantResults) throws JSONException
+ {
+ for(int r:grantResults)
+ {
+ if(r == PackageManager.PERMISSION_DENIED)
+ {
+ this.messageChannel.sendPluginResult(new PluginResult(PluginResult.Status.ERROR, PERMISSION_DENIED_ERROR));
+ return;
+ }
+ }
+ promptForRecord();
+ }
+
+ /*
+ * This little utility method catch-all work great for multi-permission stuff.
+ *
+ */
+
+ private void promptForRecord()
+ {
+ if(checkWritePermission() == PackageManager.PERMISSION_GRANTED &&
+ checkMicrophone() == PackageManager.PERMISSION_GRANTED) {
+ this.startRecordingAudio(recordId, FileHelper.stripFileProtocol(fileUriStr));
+ }
+ else if(checkMicrophone() == PackageManager.PERMISSION_GRANTED)
+ {
+ getWritePermission(0);
+ }
+ else
+ {
+ getMicPermission(0);
+ }
+
+ }
+
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org