Implemented permissions support for Marshmallow+

This commit is contained in:
Jimmie Matsson 2017-01-18 12:01:39 +01:00
parent 08eedd8596
commit ba0a8b0666
5 changed files with 101 additions and 19 deletions

2
.idea/misc.xml generated
View file

@ -37,7 +37,7 @@
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.voixtreme.vocalengine">
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.voixtreme.vocalengine">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
@ -12,14 +13,6 @@
<!-- INTERNET is needed to use a URI-based audio player, depending on the URI -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--
<uses-permission android:name="android.permission.INTERNET" />
-->
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
@ -52,7 +45,5 @@
</intent-filter>
</receiver>
</application>
</manifest>

View file

@ -1,28 +1,51 @@
package com.voixtreme.vocalengine;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.util.Log;
import android.widget.Toast;
import com.voixtreme.vocalengine.service.VoiXtremeService;
import java.util.ArrayList;
//=============================================================================
// This activity does nothing, and holds the service
public class MainActivity extends Activity {
// Tag
private static final String TAG = MainActivity.class.getSimpleName();
private static final int REQUEST_CODE_PERMISSIONS = 313;
//=========================================================================
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
if (permissionsOK()) {
startApplication();
}
}
/**
* Start application when all permissions have been granted
*/
private void startApplication() {
setContentView(R.layout.activity_main);
startVoixtremeService();
// Please comment this if you are debugging to keep the activity alive
finish();
// finish();
}
//=========================================================================
@ -32,6 +55,70 @@ public class MainActivity extends Activity {
Intent intentService = new Intent(this, VoiXtremeService.class);
startService(intentService);
}
/**
* Get all required permissions
*
* @return true if all permissions where given already...
*/
private boolean permissionsOK() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return true;
}
ArrayList<String> getPermissionsList = new ArrayList<>();
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
getPermissionsList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (checkSelfPermission(Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
getPermissionsList.add(Manifest.permission.RECORD_AUDIO);
}
if (getPermissionsList.size() > 0) {
String requestStrings[] = new String[getPermissionsList.size()];
for (int i=0, len=getPermissionsList.size();i<len;i++) {
requestStrings[i] = getPermissionsList.get(i);
}
ActivityCompat.requestPermissions(this, requestStrings, REQUEST_CODE_PERMISSIONS);
return false;
} else {
return true;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean granted = true;
for (int result : grantResults) {
if(result != PackageManager.PERMISSION_GRANTED) {
granted = false;
break;
}
}
if (granted) {
startApplication();
} else {
Toast.makeText(this.getApplicationContext(), R.string.need_permissions, Toast.LENGTH_LONG).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
finish();
}
}, 2500);
}
}
}

View file

@ -9,9 +9,10 @@ import com.voixtreme.vxtenginejni.TtsEngineApi;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.util.Log;
public class VxtEngineApi extends TtsEngineApi
{
public class VxtEngineApi extends TtsEngineApi {
private static final String TAG = "VxtEngineApi";
// The constructor should be renamed in each environment
@ -138,6 +139,8 @@ public class VxtEngineApi extends TtsEngineApi
String rootDirectory= System.getenv("EXTERNAL_STORAGE");
nativeinitializeasr( rootDirectory, serialNumber);
Log.d(TAG, "InitializeAsr - done");
return true;
}

View file

@ -8,6 +8,7 @@
<string name="state_uninitialized">Engine is uninitialized</string>
<string name="state_init_error">Engine is in init error</string>
<string name="need_permissions">You need to accept all permissions or the application cannot function correctly, terminating.</string>
<string name="BootReceiver">VoxPrinter boot Receiver</string>
</resources>