Android gluon Mobile LocalNotificationsServices.class不工作
大家好,我是使用javafx开发Android的新手Android gluon Mobile LocalNotificationsServices.class不工作,android,javafx,gluon,javafxports,gluon-mobile,Android,Javafx,Gluon,Javafxports,Gluon Mobile,大家好,我是使用javafx开发Android的新手我试图使用javafx在Android上创建推送通知(javafxports和gluon Mobile)。我的问题是推送通知没有像我预期的那样显示。我从 http://gluonhq.com/products/mobile/charm-down/ http://docs.gluonhq.com/charm/javadoc/4.2.0/com/gluonhq/charm/down/plugins/LocalNotificationsService
我试图使用javafx在Android上创建推送通知(javafxports和gluon Mobile)。
我的问题是推送通知没有像我预期的那样显示。
我从 http://gluonhq.com/products/mobile/charm-down/ http://docs.gluonhq.com/charm/javadoc/4.2.0/com/gluonhq/charm/down/plugins/LocalNotificationsService.html#getNotifications--
以下是我尝试创建的主程序推送无固定化 使用下面的LocalNotificationServices.class。
package com.sample;
import com.gluonhq.charm.down.Services;
import java.time.ZonedDateTime;
import com.gluonhq.charm.down.plugins.DisplayService;
import com.gluonhq.charm.down.plugins.LocalNotificationsService;
import com.gluonhq.charm.down.plugins.Notification;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.geometry.Rectangle2D;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.stage.Screen;
import javafx.stage.Stage;
//import android.database.sqlite.*;
/**
* Created by Guru on 1/30/2017.
*/
public class Main extends Application {
@FXML Button schedule;
public static void main(String args[])
{
launch();
}
public static String screen1ID = "Home";
public static String screen1File = "Home.fxml";
public static String screen2ID = "screen2";
public static String screen2File = "Next1.fxml";
static Group grp;
static Next nxt;
Rectangle2D visual;
ScreensController control;
Next backup;
public void init()
{
}
@Override
public void start(Stage primaryStage) throws Exception {
try{
Rectangle2D visual=Screen.getPrimary().getVisualBounds();
ScreensController mainContainer = new ScreensController();
mainContainer.loadScreen(Main.screen1ID, Main.screen1File);
backup= (Next) mainContainer.loadScreen(Main.screen2ID, Main.screen2File);
Group root = new Group();
root.getChildren().addAll(mainContainer);
Scene scene=null;
control=mainContainer;
if("android".equals(System.getProperty("javafx.platform")))
{
scene = new Scene(root,visual.getWidth(),visual.getHeight());
try {
String notificationId = "abcd1234";
Services.get(LocalNotificationsService.class).ifPresent(service -> {
service.getNotifications().add(
new Notification(notificationId, "Sample Notification Text",
ZonedDateTime.now().plusSeconds(20), () -> {
Alert alert =
new Alert(AlertType.INFORMATION, "You have been notified!");
Platform.runLater(() -> alert.showAndWait());
}));
});
}
catch(Exception e)
{
e.printStackTrace();
}
}
else
scene =new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
catch (Exception i)
{
i.printStackTrace();
}
}
}
应用程序工作正常,但会显示推送通知。
我不知道我的代码有什么问题
我在这里附上了下面的AndroidManifest.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sample" android:versionCode="1" android:versionName="1.0">
<supports-screens android:xlargeScreens="true"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="21"/>
<application android:label="Sample" android:name="android.support.multidex.MultiDexApplication" android:icon="@mipmap/ic_launcher">
<activity android:name="javafxports.android.FXActivity" android:label="Sample" android:configChanges="orientation|screenSize">
<meta-data android:name="main.class" android:value="com.sample.Main"/>
<meta-data android:name="debug.port" android:value="0"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
我觉得一切正常,但推送通知不起作用。
我不知道我错过了什么 根据需要更改此代码,希望这对您有所帮助
NotificationCompat.Builder builder=new NotificationCompat.Builder(this);
builder.setSmallIcon(R.drawable.ic);
builder.setContentTitle("NewsClient");
builder.setContentText("NewsClient is Running");
int mll=001;
NotificationManager mNotification=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
mNotification.notify(mll,builder.build());
除了在代码中调用服务外,本地通知的Charm Down插件还需要一些额外的配置,正如您在链接的中所看到的那样 在AndroidManifest文件中,您缺少一些内容:
- 使用单端启动模式
- 添加NotificationActivity
- 添加AlarmReceiver
<manifest ...>
...
<application ...>
<activity android:name="javafxports.android.FXActivity"
android:label="Sample"
android:launchMode="singleTop"
android:configChanges="orientation|screenSize">
<meta-data android:name="main.class" android:value="com.sample.Main"/>
...
</activity>
...
<activity android:name="com.gluonhq.impl.charm.down.plugins.android.NotificationActivity"
android:parentActivityName="javafxports.android.FXActivity">
<meta-data android:name="android.support.PARENT_ACTIVITY"
android:value="javafxports.android.FXActivity"/>
</activity>
<receiver android:name="com.gluonhq.impl.charm.down.plugins.android.AlarmReceiver" />
</application>
...
...
...
正如您所见,插件对您隐藏了Android实现,因此您不需要使用Android API。iOS也是如此。到目前为止,您所需要做的就是更新清单。对不起,兄弟,不能在Javafx项目中使用Android api!它对我有用,你能发布你的AndroidManifest.xml文件吗?另外请注意,该插件是关于本地通知的,而不是推送通知。一旦你运行应用程序,20秒后你应该会收到一个通知,当你点击它时,应用程序将恢复并显示警告消息。正如你所说,我已经在上面的问题@JoséPereda中附加了AndroidManifest.xml。
<manifest ...>
...
<application ...>
<activity android:name="javafxports.android.FXActivity"
android:label="Sample"
android:launchMode="singleTop"
android:configChanges="orientation|screenSize">
<meta-data android:name="main.class" android:value="com.sample.Main"/>
...
</activity>
...
<activity android:name="com.gluonhq.impl.charm.down.plugins.android.NotificationActivity"
android:parentActivityName="javafxports.android.FXActivity">
<meta-data android:name="android.support.PARENT_ACTIVITY"
android:value="javafxports.android.FXActivity"/>
</activity>
<receiver android:name="com.gluonhq.impl.charm.down.plugins.android.AlarmReceiver" />
</application>