Я получил некоторые ошибки, когда я запускаю нативный код с флаттером - PullRequest
0 голосов
/ 02 июля 2019

Привет всем, когда я пытаюсь не получать уведомления, когда приложение переместилось, я использовал канал платформы, но у меня были некоторые ошибки, когда я запускаю код, у меня нет никакого фона в java, и ошибка, котораяЯ сталкиваюсь в коде Java, ошибка, которая появляется:

E: \ flutter \ noti \ android \ app \ src \ main \ java \ com \ example \ notiapp \ NotificationExtender.java:24: ошибка: ';'ожидаемый защищенный логический onNotificationProcessing (OSNotificationReceivedResult receiveResult) {^ E: \ flutter \ noti \ android \ app \ src \ main \ java \ com \ example \ notiapp \ NotificationExtender.java: 24: ошибка: ';'ожидаемый защищенный логический onNotificationProcessing (OSNotificationReceivedResult receiveResult) {^ 2 error

FAILURE: сборка завершилась неудачей с исключением.

И еще один вопрос: так ли я написал наивный код (код Java)) Правильно решать фоновые уведомления, пожалуйста, помогите мне, ребята. Я новичок

Посмотрите на код дротика ниже:

class WebviewUi extends StatefulWidget {

  @override
  _WebviewState createState() => _WebviewState();
}

class _WebviewState extends State<WebviewUi> {

  static const platform = const MethodChannel('example.app.com/notifications');


  Future<void> _receiveNotifications() async {
    try {
      platform.invokeMethod('notification');
    } on PlatformException catch (e) {
      print('${e.message}');
    }


  }


  @override
  initState()  {
    initPlatformState();
    _receiveNotifications();
    super.initState();

    );


  }

  Future<void> initPlatformState() async {
    if (!mounted) return;

    OneSignal.shared.setLogLevel(OSLogLevel.verbose, OSLogLevel.none);

    OneSignal.shared.setRequiresUserPrivacyConsent(true);
    OneSignal.shared.consentGranted(true);


    var settings = {
      OSiOSSettings.autoPrompt: false,
      OSiOSSettings.promptBeforeOpeningPushUrl: true
    };



    OneSignal.shared.setNotificationReceivedHandler((notification) {
      this.setState(() {
        print('Notifiaction received');
      });
    });

    OneSignal.shared
        .setNotificationOpenedHandler((OSNotificationOpenedResult result) {
      this.setState(() {
        nUrl = result.notification.payload.additionalData['url'].toString();
      });
      Navigator.of(context).pushReplacement(
          MaterialPageRoute(builder: (context) =>  WebNotification(nUrl)));

    });
    // NOTE: Replace with your own app ID from https://www.onesignal.com
    await OneSignal.shared
        .init("xxxx-xxxx-xxxx-xxxx-xxxx", iOSSettings: settings);

    OneSignal.shared
        .setInFocusDisplayType(OSNotificationDisplayType.notification);
    OneSignal.shared.inFocusDisplayType();

  }



  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: PreferredSize(
        preferredSize: Size.fromHeight(0),
        child: AppBar(
        ),

      ),

      body:   Text("Hello")

    );
  }

}

java Класс NotificationExtender:

import android.support.v4.app.NotificationCompat;
import com.onesignal.OSNotificationPayload;
import com.onesignal.NotificationExtenderService;
import java.math.BigInteger;

public class NotificationExtender extends NotificationExtenderService {
    private static NotificationExtender notificationExtender;
    public NotificationExtender(){
        notificationExtender = this;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        GeneratedPluginRegistrant.registerWith(this);

        new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
                new MethodCallHandler(){
                    @Override
                    public void onMethodCall(MethodCall call, Result result) {
                        if (call.method.equals("notification")) {

                            @Override
                            protected boolean onNotificationProcessing(OSNotificationReceivedResult receivedResult) {
                                OverrideSettings overrideSettings = new OverrideSettings();
                                overrideSettings.extender = new NotificationCompat.Extender() {
                                    @Override
                                    public NotificationCompat.Builder extend(NotificationCompat.Builder builder) {
                                        // Sets the background notification color to Green on Android 5.0+ devices.
                                        return builder.setColor(new BigInteger("FF00FF00", 16).intValue());
                                    }
                                };

                                OSNotificationDisplayedResult displayedResult = displayNotification(overrideSettings);
                                Log.d("OneSignalExample", "Notification displayed with id: " + displayedResult.androidNotificationId);

                                return true;
                            }

                        } else {
                            result.notImplemented();
                        }
                    }
                });
    }



    public synchronized NotificationExtender getInctance()
    {
        return notificationExtender ;
    }
}

Класс Java MainActivity:

package com.noti.notieapp;
import java.math.BigInteger;

import android.os.Bundle;
import io.flutter.app.FlutterActivity;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {
    NotificationExtender notificationExtender;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
      notificationExtender = NotificationExtender.getInstance();
    GeneratedPluginRegistrant.registerWith(this);

  }

}

1 Ответ

0 голосов
/ 02 июля 2019

Это не выглядит правильно:

@Override
public void onMethodCall(MethodCall call, Result result) {
   if (call.method.equals("notification")) {

       // Overriding onNotificationProcessing(..) is not allowed here:

       @Override
       protected boolean onNotificationProcessing(OSNotificationReceivedResult receivedResult) {
           // ....
       }                            
};

Вы переопределяете метод внутри другого метода, это не работает в Java.

Я не знаю специфики того, какие библиотеки вы там используете, но с точки зрения синтаксиса ожидается вызов onNotificationProcessing(..) или метод должен быть переопределен где-то еще.

...