mirror of
https://github.com/love2d/love-android.git
synced 2026-08-12 00:20:57 +02:00
Add function to retrieve and request mic permission.
This commit is contained in:
@@ -34,7 +34,9 @@ public class GameActivity extends SDLActivity {
|
||||
private static Context context;
|
||||
private static Vibrator vibrator = null;
|
||||
protected final int[] externalStorageRequestDummy = new int[1];
|
||||
protected final int[] recordAudioRequestDummy = new int[1];
|
||||
public static final int EXTERNAL_STORAGE_REQUEST_CODE = 1;
|
||||
public static final int RECORD_AUDIO_REQUEST_CODE = 2;
|
||||
private static boolean immersiveActive = false;
|
||||
private static boolean mustCacheArchive = false;
|
||||
private boolean storagePermissionUnnecessary = false;
|
||||
@@ -396,6 +398,16 @@ public class GameActivity extends SDLActivity {
|
||||
return audioManager.isMusicActive();
|
||||
}
|
||||
|
||||
@Keep
|
||||
public void showRecordingAudioPermissionMissingDialog() {
|
||||
AlertDialog dialog = new AlertDialog.Builder(mSingleton)
|
||||
.setTitle("Audio Recording Permission Missing")
|
||||
.setMessage("It appears that this game request for mic permission. The game may not work correctly without mic permission!")
|
||||
.setNeutralButton("Continue", null)
|
||||
.create();
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
public void showExternalStoragePermissionMissingDialog() {
|
||||
AlertDialog dialog = new AlertDialog.Builder(mSingleton)
|
||||
.setTitle("Storage Permission Missing")
|
||||
@@ -412,22 +424,39 @@ public class GameActivity extends SDLActivity {
|
||||
if (grantResults.length > 0) {
|
||||
Log.d("GameActivity", "Received a request permission result");
|
||||
|
||||
if (requestCode == EXTERNAL_STORAGE_REQUEST_CODE) {
|
||||
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
Log.d("GameActivity", "Permission granted");
|
||||
} else {
|
||||
Log.d("GameActivity", "Did not get permission.");
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
|
||||
showExternalStoragePermissionMissingDialog();
|
||||
switch (requestCode) {
|
||||
case EXTERNAL_STORAGE_REQUEST_CODE: {
|
||||
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
Log.d("GameActivity", "Permission granted");
|
||||
} else {
|
||||
Log.d("GameActivity", "Did not get permission.");
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
|
||||
showExternalStoragePermissionMissingDialog();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Log.d("GameActivity", "Unlocking LÖVE thread");
|
||||
synchronized (externalStorageRequestDummy) {
|
||||
externalStorageRequestDummy[0] = grantResults[0];
|
||||
externalStorageRequestDummy.notify();
|
||||
Log.d("GameActivity", "Unlocking LÖVE thread");
|
||||
synchronized (externalStorageRequestDummy) {
|
||||
externalStorageRequestDummy[0] = grantResults[0];
|
||||
externalStorageRequestDummy.notify();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
case RECORD_AUDIO_REQUEST_CODE: {
|
||||
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
Log.d("GameActivity", "Mic ermission granted");
|
||||
} else {
|
||||
Log.d("GameActivity", "Did not get mic permission.");
|
||||
}
|
||||
|
||||
Log.d("GameActivity", "Unlocking LÖVE thread");
|
||||
synchronized (recordAudioRequestDummy) {
|
||||
recordAudioRequestDummy[0] = grantResults[0];
|
||||
recordAudioRequestDummy.notify();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -454,6 +483,49 @@ public class GameActivity extends SDLActivity {
|
||||
return ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
|
||||
}
|
||||
|
||||
@Keep
|
||||
public boolean hasRecordAudioPermission() {
|
||||
if (ActivityCompat.checkSelfPermission(this,
|
||||
Manifest.permission.RECORD_AUDIO)
|
||||
== PackageManager.PERMISSION_GRANTED) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Log.d("GameActivity", "Requesting mic permission and locking LÖVE thread until we have an answer.");
|
||||
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, RECORD_AUDIO_REQUEST_CODE);
|
||||
|
||||
synchronized (recordAudioRequestDummy) {
|
||||
try {
|
||||
recordAudioRequestDummy.wait();
|
||||
} catch (InterruptedException e) {
|
||||
Log.d("GameActivity", "requesting mic permission", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED;
|
||||
}
|
||||
|
||||
@Keep
|
||||
public void requestRecordAudioPermission() {
|
||||
if (ActivityCompat.checkSelfPermission(this,
|
||||
Manifest.permission.RECORD_AUDIO)
|
||||
== PackageManager.PERMISSION_GRANTED) {
|
||||
return;
|
||||
}
|
||||
|
||||
Log.d("GameActivity", "Requesting mic permission and locking LÖVE thread until we have an answer.");
|
||||
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, RECORD_AUDIO_REQUEST_CODE);
|
||||
|
||||
synchronized (recordAudioRequestDummy) {
|
||||
try {
|
||||
recordAudioRequestDummy.wait();
|
||||
} catch (InterruptedException e) {
|
||||
Log.d("GameActivity", "requesting mic permission", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Keep
|
||||
public boolean initializeSafeArea() {
|
||||
if (android.os.Build.VERSION.SDK_INT >= 28) {
|
||||
|
||||
Reference in New Issue
Block a user