2015-05-07 12 views
6

Aşağıdaki sorunu yaşıyorum: Android'de benim Qt tabanlı uygulamasında (Qt 5.4.1 mobil için) açık bir etkinlik başlatarak harici bir etkinlik çağrılıyor niyet. Bu, niyete hiçbir veri eklenmediğinde çok iyi çalışır. Ancak putExtra'yı bir dize vb. Eklemek için kullandığımda, hedef etkinlik bu verileri bulamıyor. Qt uygulamasınınAndroid'de Qt uygulamasının amacı ile (açık) harici etkinlik arama - putExtra çalışmıyor

pasajı: AndroidManifest.xml (hedef Java uygulaması) arasında

public class Test_Activity extends Activity 
{ 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     ... 

     Intent intent = getIntent(); 

     String text = intent.getStringExtra("test_subject");//is null 

     Bundle bundle = intent.getExtras();//is null 

     ... 
    } 
} 

pasajı: ekli verileri almak için çalışır Java hedef app ait

QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;"); 
if (activity.isValid()) 
{ 
    QAndroidJniObject intent("android/content/Intent", "()V"); 
    if (intent.isValid()) 
    { 
     QAndroidJniObject action = QAndroidJniObject::fromString("test.app.DO_SOMETHING"); 
     if (action.isValid()) 
     { 
      intent.callObjectMethod("setAction", 
            "(Ljava/lang/String;)Landroid/content/Intent;", 
            action.object<jobject>()); 

      QAndroidJniObject subject = QAndroidJniObject::fromString("test_subject"); 
      QAndroidJniObject text = QAndroidJniObject::fromString("test_text"); 
      jint flag = QAndroidJniObject::getStaticField<jint>("android/content/Intent", 
                   "FLAG_GRANT_READ_URI_PERMISSION"); 

      intent.callObjectMethod("addFlags", "(I)V", flag); 

      intent.callObjectMethod("putExtra", 
            "(Ljava/lang/String;Ljava/lang/string;)Landroid/content/Intent;", 
            subject.object<jstring>(), 
            text.object<jstring>()); 

      if (intent.isValid()) 
       activity.callObjectMethod("startActivity", "(Landroid/content/Intent;)V", intent.object<jobject>()); 
     } 
    } 
} 

pasajı:

<intent-filter> 
    <action android:name="test.app.DO_SOMETHING" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

Çalıştırmak için biraz uğraştım ama başarısız oldu. Ne yapıyorum yanlış? İzin veya bayrak eksik olabilir mi?

Lütfen

Yardım edin. Çok teşekkürler.

cevap

-1

Sen sınıf sınıf Seçici oluşturmanız gerekir: function geçersiz handleActivityResult ile kamu QAndroidActivityResultReceiver (int receiverRequestCode, int ResultCode, const & verileri QAndroidJniObject) ve #define REQUEST_CODE = 42 ile niyet başlar; QtAndroid :: startActivity (niyet, REQUEST_CODE, seçici);

Yani, ben bu soruya cevap vermek çok geciktim olabilir github repo

https://github.com/tripolskypetr/qmlchooseimage

0

benim örnek kullanabilirsiniz, ancak düşünce aynı işlevselliği arıyor biri için yararlı olabilir. Bu kod benim için gayet iyi çalışıyor, Intent kullanarak veri alabiliyorum.

#include<QtAndroidExtras/QtAndroid> 
#include<QtAndroidExtras/QAndroidJniObject> 
#include<QtAndroidExtras/QAndroidIntent> 
#include<QtAndroidExtras> 

QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", 
                     "activity", 
                     "()Landroid/app/Activity;"); 
if (activity.isValid()) 
{ 
    QAndroidJniObject intent("android/content/Intent", "()V"); 
    if (intent.isValid()) 
    { 
     QAndroidJniObject action = QAndroidJniObject::fromString("test.app.DO_SOMETHING"); 
     if (action.isValid()) 
     { 
      intent.callObjectMethod("setAction", 
            "(Ljava/lang/String;)Landroid/content/Intent;", 
            action.object<jobject>()); 
      QAndroidJniObject subject = QAndroidJniObject::fromString("url"); 
      QAndroidJniObject text = QAndroidJniObject::fromString("http://www.google.com"); 


      intent.callObjectMethod("putExtra", 
            "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;", 
            subject.object(), 
            text.object()); 

      if (intent.isValid()) 
       activity.callMethod<void>("startActivity", "(Landroid/content/Intent;)V", intent.object<jobject>()); 
     } 
    } 
} 

Bu Faydalı QT Android Blog

kullanma Kodunuzdaki birkaç değişiklik yapılmış
İlgili konular