Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
VAV2001
0 / 0 / 0
Регистрация: 09.12.2015
Сообщений: 4
1

Qt android JNI - Вызов галереи

25.08.2017, 15:58. Просмотров 592. Ответов 2
Метки нет (Все метки)

Доброго дня !
делаю вызов галереи:
C++ (Qt)
1
2
3
4
5
QAndroidJniObject action = QAndroidJniObject::fromString( "android.intent.action.PICK");
QAndroidJniObject intent( "android/content/Intent");
intent.callObjectMethod( "setAction", "(Ljava/lang/String;)Landroid/content/Intent;", action.object<jstring>());
intent.callObjectMethod( "setType", "(Ljava/lang/String;)Landroid/content/Intent;", QAndroidJniObject::fromString("image/*").object<jstring>());
QtAndroid::startActivity( intent.object<jobject>(), 101,this);
далее обрабатываю ответ выбора фотки из галереи:
C++ (Qt)
1
2
3
4
5
6
virtual void handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject & data) override {
        jint RESULT_OK = QAndroidJniObject::getStaticField<jint>("android/app/Activity", "RESULT_OK");
        if (receiverRequestCode == 101 && resultCode == RESULT_OK) {
            const QString fileURI = data.callObjectMethod("getData","()Landroid/net/Uri;").toString();
        }
}
Ответ получаю в fileURI в виде URI ссылки - "content://media/external/images/media/3300"

ВОПРОС: как средствами JNI преобразовать URI ссылку в реальный путь к файлу или получить QByteArray ??

PS: Видел делают на яве классы обработчики и потом к ним обращаются, но тут неясно как и где размещать эти классы в системе .....
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2017, 15:58
Ответы с готовыми решениями:

Qt и JNI вызов java класса
Всем привет, недавно делал Android приложение, использовал Jni. Вроде было не сильно сложно. Сейчас...

Вызов C++ dll без использования JNI
Можно ли вызывать функции dll которые написаны &quot;в стиле&quot; С (без JNI): extern &quot;C&quot;...

JNI и Android studio
Цель: вывести метод шифрования в отдельный модуль на C++ (Для усложнения реверсинженеринга). ...

Вызов системной JNI-функции из своего приложения
Имеется Highscreen ICE 2, у которого есть второй дисплей на задней панели(OLED). Хочу получить...

Android получение фотографий из галереи
Все привет! Необходимо реализовать получение масса всех фотографий из галерей + камеры. получать...

2
terriblemike
48 / 41 / 15
Регистрация: 16.06.2015
Сообщений: 182
30.08.2017, 10:08 2
А нельзя путем формирования пути к файлу через
QDir::currentPath + урезанная fileURI (например "/media/external/images/media/3300")
?
0
VAV2001
0 / 0 / 0
Регистрация: 09.12.2015
Сообщений: 4
31.08.2017, 09:08  [ТС] 3
нет не получается - путь указанный в URI ссылке не соответствует реальности, да и имя файла тоже не такое.

Тут один выход - интегрировать в свое приложение ява-класс и обращаясь к нему просить конвертировать URI в полный путь и возвращать его тебе.

Пример ява-класса:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MyFilePath extends org.qtproject.qt5.android.bindings.QtActivity{
    public static String getFileName(Context context, Uri uri) {
        String fileName = "";
                 Cursor cursor = null;
                 try {
                     String[] projection = { MediaStore.Video.Media.DISPLAY_NAME };
                     cursor = context.getContentResolver().query(uri, projection, null, null, null);
                     int nameIndex = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);
                     cursor.moveToFirst();
                     fileName = cursor.getString(nameIndex);
                 } finally {
                     if (cursor != null) {
                         cursor.close();
                     }
                 }
                 return fileName;
        }
}
Ну и на стороне своего приложения отправляем URI ссылку:
C++ (Qt)
1
2
3
4
5
6
QAndroidJniObject FotoFile = QAndroidJniObject::callStaticObjectMethod(
                            "org/qtproject/qt5/android/bindings/MyFilePath",
                            "getFileName",
                            "(Landroid/content/Context;Landroid/net/Uri;)Ljava/lang/String;",
                            QtAndroid::androidActivity().object<jobject>(),
                            fileURI.object<jobject>());
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2017, 09:08

Вызов активности android
в начале метода onCreate() в MainActivity вызываю 2-е активити через intent, которое должно...

Вызов activity повторно android
здравствуйте , начал я писать можно сказать первую ну не маленькую программу для андроид,...

Как можно организовать вызов метода WCF из Android приложения?
Привет народ. Как можно организовать вызова метода WCF из Android приложение? Нашел пример на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru