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">