android: READ_MEDIA_IMAGES is now forbidden..

This commit is contained in:
luboslenco
2026-06-03 09:42:13 +02:00
parent 7d5479f8e1
commit 5629f6890f
4 changed files with 49 additions and 70 deletions
+1 -1
View File
@@ -110,7 +110,7 @@ else if (platform == "android") {
project.add_lib("OpenSLES");
}
project.target_options.android.package = flags.package;
project.target_options.android.permissions = [ "android.permission.READ_MEDIA_IMAGES", "android.permission.INTERNET" ];
project.target_options.android.permissions = [ "android.permission.INTERNET" ];
project.target_options.android.versionCode = get_version_code();
project.target_options.android.versionName = "1.0 alpha";
}
+47 -47
View File
@@ -41,57 +41,57 @@ wchar_t *AndroidFileDialogSave() {
return L"/storage/emulated/0/Pictures/ArmorPaint/untitled";
}
jstring android_permission_name(JNIEnv *env, const char *perm_name) {
jclass ClassManifestpermission = (*env)->FindClass(env, "android/Manifest$permission");
jfieldID lid_PERM = (*env)->GetStaticFieldID(env, ClassManifestpermission, perm_name, "Ljava/lang/String;");
jstring ls_PERM = (jstring)((*env)->GetStaticObjectField(env, ClassManifestpermission, lid_PERM));
return ls_PERM;
}
// jstring android_permission_name(JNIEnv *env, const char *perm_name) {
// jclass ClassManifestpermission = (*env)->FindClass(env, "android/Manifest$permission");
// jfieldID lid_PERM = (*env)->GetStaticFieldID(env, ClassManifestpermission, perm_name, "Ljava/lang/String;");
// jstring ls_PERM = (jstring)((*env)->GetStaticObjectField(env, ClassManifestpermission, lid_PERM));
// return ls_PERM;
// }
bool android_has_permission(struct android_app *app, const char *perm_name) {
ANativeActivity *activity = iron_android_get_activity();
JNIEnv *env;
JavaVM *vm = iron_android_get_activity()->vm;
(*vm)->AttachCurrentThread(vm, &env, NULL);
bool result = false;
jstring ls_PERM = android_permission_name(env, perm_name);
jint PERMISSION_GRANTED = (jint)(-1);
{
jclass ClassPackageManager = (*env)->FindClass(env, "android/content/pm/PackageManager");
jfieldID lid_PERMISSION_GRANTED = (*env)->GetStaticFieldID(env, ClassPackageManager, "PERMISSION_GRANTED", "I");
PERMISSION_GRANTED = (*env)->GetStaticIntField(env, ClassPackageManager, lid_PERMISSION_GRANTED);
}
{
jobject activity = app->activity->clazz;
jclass ClassContext = (*env)->FindClass(env, "android/content/Context");
jmethodID MethodcheckSelfPermission = (*env)->GetMethodID(env, ClassContext, "checkSelfPermission", "(Ljava/lang/String;)I");
jint int_result = (*env)->CallIntMethod(env, activity, MethodcheckSelfPermission, ls_PERM);
result = (int_result == PERMISSION_GRANTED);
}
(*vm)->DetachCurrentThread(vm);
return result;
}
// bool android_has_permission(struct android_app *app, const char *perm_name) {
// ANativeActivity *activity = iron_android_get_activity();
// JNIEnv *env;
// JavaVM *vm = iron_android_get_activity()->vm;
// (*vm)->AttachCurrentThread(vm, &env, NULL);
// bool result = false;
// jstring ls_PERM = android_permission_name(env, perm_name);
// jint PERMISSION_GRANTED = (jint)(-1);
// {
// jclass ClassPackageManager = (*env)->FindClass(env, "android/content/pm/PackageManager");
// jfieldID lid_PERMISSION_GRANTED = (*env)->GetStaticFieldID(env, ClassPackageManager, "PERMISSION_GRANTED", "I");
// PERMISSION_GRANTED = (*env)->GetStaticIntField(env, ClassPackageManager, lid_PERMISSION_GRANTED);
// }
// {
// jobject activity = app->activity->clazz;
// jclass ClassContext = (*env)->FindClass(env, "android/content/Context");
// jmethodID MethodcheckSelfPermission = (*env)->GetMethodID(env, ClassContext, "checkSelfPermission", "(Ljava/lang/String;)I");
// jint int_result = (*env)->CallIntMethod(env, activity, MethodcheckSelfPermission, ls_PERM);
// result = (int_result == PERMISSION_GRANTED);
// }
// (*vm)->DetachCurrentThread(vm);
// return result;
// }
void android_request_file_permissions(struct android_app *app) {
ANativeActivity *activity = iron_android_get_activity();
JNIEnv *env;
JavaVM *vm = iron_android_get_activity()->vm;
(*vm)->AttachCurrentThread(vm, &env, NULL);
jobjectArray perm_array = (*env)->NewObjectArray(env, 1, (*env)->FindClass(env, "java/lang/String"), (*env)->NewStringUTF(env, ""));
(*env)->SetObjectArrayElement(env, perm_array, 0, android_permission_name(env, "READ_MEDIA_IMAGES")); // MANAGE_EXTERNAL_STORAGE
jobject jactivity = app->activity->clazz;
jclass ClassActivity = (*env)->FindClass(env, "android/app/Activity");
jmethodID MethodrequestPermissions = (*env)->GetMethodID(env, ClassActivity, "requestPermissions", "([Ljava/lang/String;I)V");
(*env)->CallVoidMethod(env, jactivity, MethodrequestPermissions, perm_array, 0);
(*vm)->DetachCurrentThread(vm);
}
// void android_request_file_permissions(struct android_app *app) {
// ANativeActivity *activity = iron_android_get_activity();
// JNIEnv *env;
// JavaVM *vm = iron_android_get_activity()->vm;
// (*vm)->AttachCurrentThread(vm, &env, NULL);
// jobjectArray perm_array = (*env)->NewObjectArray(env, 1, (*env)->FindClass(env, "java/lang/String"), (*env)->NewStringUTF(env, ""));
// (*env)->SetObjectArrayElement(env, perm_array, 0, android_permission_name(env, "READ_MEDIA_IMAGES"));
// jobject jactivity = app->activity->clazz;
// jclass ClassActivity = (*env)->FindClass(env, "android/app/Activity");
// jmethodID MethodrequestPermissions = (*env)->GetMethodID(env, ClassActivity, "requestPermissions", "([Ljava/lang/String;I)V");
// (*env)->CallVoidMethod(env, jactivity, MethodrequestPermissions, perm_array, 0);
// (*vm)->DetachCurrentThread(vm);
// }
void android_check_permissions() {
ANativeActivity *activity = iron_android_get_activity();
struct android_app *app = (struct android_app *)activity->instance;
bool hasPermissions = android_has_permission(app, "READ_MEDIA_IMAGES"); // MANAGE_EXTERNAL_STORAGE
if (!hasPermissions)
android_request_file_permissions(app);
// ANativeActivity *activity = iron_android_get_activity();
// struct android_app *app = (struct android_app *)activity->instance;
// bool hasPermissions = android_has_permission(app, "READ_MEDIA_IMAGES");
// if (!hasPermissions)
// android_request_file_permissions(app);
JNIEnv *env;
JavaVM *vm = iron_android_get_activity()->vm;