Botón General Share en Android en Qt Quick
En mi aplicación Qt Quick, cuya primera plataforma de destino es Android, necesito permitir al usuario compartir una imagen. Por eso me refiero a la acción de acción general en Android, que no se limita a ninguna red social en particular:
- Bloqueo de orientación de pantalla QML
- Adjuntar al proceso de Android desde Qt Creator
- Qt para Android - el equivalente de startActivityForResult no funciona
- Cómo utilizar la clase Qt Jni "QAndroidJniObject"
- Android Emulator no funciona en Ubuntu después de actualizar Android Studio a 2.0 - Biblioteca Qt no encontrada
Hice encontrar algunos hilos sobre el intercambio de FB y Twitter de Qt, pero utilizan Facebook / Twitter API directamente, que no es lo que quiero.
De lo que he encontrado hasta ahora, parece que no hay forma de multiplataforma para hacer esto y mi aplicación probablemente tiene que incluir algún código Java. Si esto es correcto, ¿cuál es actualmente la forma correcta de escribir código específico de la plataforma en Android? ¿Me gusta esto ?
Otra idea es que podría ser posible invocar la acción de acciones a través de Javascript en ejecución en un sitio web cargado en WebView . Dado que las aplicaciones web tienen compartir, esto debería ser posible y probablemente más multiplataforma. ¿Eso parece razonable?
- ¿Cómo puedo cambiar la plataforma --android en Qt Creator para no ser android - 1 en el modo de depuración?
- Cómo quitar el modo de depuración en la salida de liberación en android con QT 5.2
- ¿Por qué se utiliza un único modelo de subproceso para actualizar la interfaz de usuario como subproceso principal?
- ¿Cómo especificar bibliotecas sólo para plataforma Android construir en el archivo .pro?
- Depuración de la aplicación android en el destino en QtCreator
- Qt / Necessitas - QFileDialog reemplazo / piel?
- Portar aplicaciones basadas en Qt en Android
- Actividad de Android / Intención vs. Qt Signal / Slot vs. iPhone? /?
Por lo que a mí respecta. La mejor y realmente la única manera práctica es usar Jni. Parece ser muy confuso a primera vista, pero si tienes una pequeña experiencia de java, seguro que puedes hacerlo.
Para enviar un texto a otra aplicación como facebook debemos usar Intents. Así que simplemente podemos hacer el trabajo en un simple archivo Java y lo llamamos desde c + + lado utilizando Jni. Aquí está el contenido del archivo SendIntent.java. La clase tiene una función de miembro estática que da un contexto y comienza el intento. A continuación, envía los datos de texto a la nueva actividad.
package com.example.android.tools; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; public class SendIntent { public static void sendText(Activity context,String text) { Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, text); sendIntent.setType("text/plain"); context.startActivity(Intent.createChooser(sendIntent, text)); } }
Así que en el lado de c + + sólo tenemos que iniciar una actividad de Android y pasarlo a esta clase: Aquí está el código de C + +:
void example::shareText(QString str) { QAndroidJniEnvironment _env; QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;"); //activity is valid if (_env->ExceptionCheck()) { _env->ExceptionClear(); throw InterfaceConnFailedException(); } if ( activity.isValid() ) { QAndroidJniObject::callStaticMethod<void>("com/example/android/tools/SendIntent","sendText","(Landroid/app/Activity;Ljava/lang/String;)V",activity.object<jobject>(),QAndroidJniObject::fromString(str).object<jstring>()); if (_env->ExceptionCheck()) { _env->ExceptionClear(); throw InterfaceConnFailedException(); } }else throw InterfaceConnFailedException(); }
Si está preocupado por los problemas de plataforma cruzada, puede utilizar las directivas Preprocessor para escribir códigos dependientes de la plataforma, esta es una solución muy común en la programación en C ++.
Y lo último que debo mencionar es agregar estas líneas de código al archivo .pro. Así qt será capaz de encontrar los recursos de java también:
android { QT += androidextras ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources }
En este caso, android-sources es el directorio que he colocado todas las fuentes de java.
Espero que este post te ayude también: http://blog.lasconic.com/share-on-ios-and-android-using-qml/
- Estilo de caracteres / intervalo para establecer el espaciado entre letras
- Cómo extraer todo el nombre de usuario del usuario que están en línea desde la base de datos de firebase.