QT/QML Android App, откройте приложение при нажатии на панель уведомлений

Я делаю QT для приложений Android. Когда я нажимаю кнопку уведомить панель выше в планшете. Но если нажать кнопку "Уведомить", мои приложения открываются / фокусируются (не знаю) с черным окном. Как это сделать просто. Мой код:

package org.ays.operation;

import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.app.PendingIntent;
import android.content.Intent;


public class NotificationClient extends org.qtproject.qt5.android.bindings.QtActivity
{
     private static NotificationManager m_notificationManager;
     private static Notification.Builder m_builder;
     private static NotificationClient m_instance;
     private static PendingIntent contentIntent;
     private static Intent intent;


     public NotificationClient()
     {
         m_instance = this;
     }

     public static  void notify2()
     {
         intent = new Intent(m_instance, NotificationClient.class);
         contentIntent = PendingIntent.getActivity(m_instance, 0, intent,
                                         PendingIntent.FLAG_UPDATE_CURRENT);

         if (m_notificationManager == null) {
             m_notificationManager = (NotificationManager)m_instance.getSystemService(Context.NOTIFICATION_SERVICE);
             m_builder = new Notification.Builder(m_instance);
             m_builder.setSmallIcon(R.drawable.icon);
             m_builder.setContentTitle("A message from Qt!");
             m_builder.setDefaults(Notification.DEFAULT_SOUND);
             m_builder.setContentIntent(contentIntent);
             m_builder.setAutoCancel(true);
         }

         m_builder.setContentText("Bla Bla");
         m_notificationManager.notify(1, m_builder.build());
     }
 }

Я гость, важный код PendingIntent, чтобы открыть / сосредоточить основное приложение. Другой случай - я не хочу использовать notify2 как статический. Могу ли я использовать его динамически из Qt/JNI

0 ответов

Первый способ:

вы должны изменить эту строку

intent = new Intent(m_instance, NotificationClient.class);

к

Intent intent = new Intent(mActivityInstance, mActivityInstance.getClass());

а также

contentIntent = PendingIntent.getActivity(m_instance, 0, intent,
                                     PendingIntent.FLAG_UPDATE_CURRENT);

к

contentIntent = PendingIntent.getActivity(mActivityInstance, 0, intent,
                                     PendingIntent.FLAG_UPDATE_CURRENT);

внимание mActivityInstance - это ваша основная деятельность.

Я установил свой mActivityInstance из C++ и с JNI, как показано ниже:

const QAndroidJniObject m_JavaNotification("com/falsinsoft/qtandroidtools/AndroidNotification",
                   "(Landroid/app/Activity)V",
                   QtAndroid::androidActivity().object<jobject>());

и в моем AndroidNotification.java:

public class AndroidNotification {
private final Activity mActivityInstance;

public AndroidNotification(Activity ActivityInstance)
{
    mActivityInstance = ActivityInstance;
}
}

второй способ (я не уверен, что это решит вашу проблему!): измените эту строку в файле manifest.xml:

    <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="YourProjectName" android:icon="@drawable/icon">

кому:

    <application android:hardwareAccelerated="true" android:name="your java class extend from QtActivity" android:label="YourProjectName" android:icon="@drawable/icon">
Другие вопросы по тегам