Flutter 应用程序在集成原生 android sdk 后卡在黑屏

如何解决Flutter 应用程序在集成原生 android sdk 后卡在黑屏

我有一个版本为 2.2.3 的 Flutter 应用程序,我最近使用平台通道方法将本机 SDK 集成到其中。出于某种原因,执行此操作后,每当我在模拟器或实际设备上运行 Flutter 应用程序时,它就会开始显示黑屏。该应用程序卡在黑屏上,不会继续显示主屏幕。这是我的主文件代码

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  InAppPurchaseandroidPlatformAddition.enablePendingPurchases();

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  final Future<FirebaseApp> _initialization = Firebase.initializeApp();

  @override
  Widget build(BuildContext context) {
    SystemChrome.setEnabledsystemUIOverlays([]);
    SystemChrome.setPreferredOrientations(
        [DeviceOrientation.portraitUp,DeviceOrientation.portraitDown]);
    print('Inside main.dart build method');
    return FutureBuilder(
        future: _initialization,builder: (context2,snapshot) {
          if (snapshot.hasError) {
            NetworkErr();
            return Container();
          } else if (snapshot.connectionState == ConnectionState.done) {
            return MultiProvider(
              providers: [
                ChangeNotifierProvider(
                  create: (ctx) => ClueList(),),ChangeNotifierProvider(
                  create: (ctx) => score(),ChangeNotifierProvider(
                  create: (ctx) => Auth(),ChangeNotifierProvider(
                  create: (ctx) => Badges(),],child: MaterialApp(
                theme: ThemeData(
                    primarySwatch: Colors.teal,// primaryColor: Color.fromARGB(150,35,152,159,primaryColorLight: Color.fromARGB(
                      80,accentColor: Color.fromARGB(255,255,185,36),textTheme: ThemeData.light().textTheme.copyWith(
                            bodyText2: TextStyle(
                          fontFamily: 'Happy School',fontSize: 20,))),home: HomeScreen(),

在 MainActivity.java 文件中,我集成了本地 sdk,其中我调用从 Yodo1 MAS 检索广告 下面是 MainActivity.java 文件中的代码

package com.example.xxxxx;

import android.content.Intent;
import android.os.Bundle;

import androidx.annotation.NonNull;

import com.yodo1.mas.Yodo1Mas;
import com.yodo1.mas.error.Yodo1MasError;
import com.yodo1.mas.event.Yodo1MasAdEvent;

import io.Flutter.app.FlutterActivity;
import io.Flutter.embedding.engine.FlutterEngine;
import io.Flutter.plugin.common.MethodCall;
import io.Flutter.plugin.common.MethodCall;
import io.Flutter.plugin.common.MethodChannel;
import io.Flutter.plugin.common.MethodChannel.Result;
import io.Flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.Flutter.plugins.GeneratedpluginRegistrant;

public class MainActivity extends FlutterActivity {

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        System.out.println("before Calling MAS Get Instance");

        Yodo1Mas.getInstance().init(this,"xxxxxxxxx",new Yodo1Mas.InitListener() {
            @Override
            public void onMasInitSuccessful() {
             System.out.println("MAS Init Successful");

            }

            @Override
            public void onMasInitFailed(@NonNull Yodo1MasError error) {

            }
        });
        new MethodChannel(getFlutterView(),"com.examples.xxxxxx/yodo1").setMethodCallHandler(
            new MethodCallHandler() {
                @Override
                public void onMethodCall(MethodCall call,Result result) {
                    if (call.method.equals("getBannerAd")) {
                        System.out.println("RADHA LOading Banner Ad");
                        getBannerAd();

                    }
                }
            }
        );
        
    }

    private void getBannerAd() {

        int align = Yodo1Mas.BannerTop | Yodo1Mas.BannerHorizontalCenter;

        boolean isLoaded = Yodo1Mas.getInstance().isBannerAdLoaded();
        
            if (isLoaded) {
            Yodo1Mas.getInstance().showBannerAd(MainActivity.this,align);
            Yodo1Mas.getInstance().setBannerListener(new Yodo1Mas.BannerListener() {
            @Override
            public void onAdOpened(@NonNull Yodo1MasAdEvent event) {
            }

            @Override
            public void onAdError(@NonNull Yodo1MasAdEvent event,@NonNull Yodo1MasError error) {

            }

            @Override
            public void onAdClosed(@NonNull Yodo1MasAdEvent event) {

            }
        }    
        );
    }
    }
}

这是我的 AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.xxxxx">
    
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
    <uses-permission android:name="com.android.vending.BILLING" />    

    <application
        android:name="io.Flutter.app.FlutterApplication"
        android:icon="@mipmap/ic_launcher"
        android:usesCleartextTraffic="false"
        android:networkSecurityConfig="@xml/network_security_config">
        <activity
            android:name=".MainActivity"
            android:launchMode="singletop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
           
                         
  
            <Meta-data
              android:name="io.Flutter.embedding.android.normalTheme"
              android:resource="@style/normalTheme"
              />
          
            <Meta-data
              android:name="io.Flutter.embedding.android.SplashScreenDrawable"
              android:resource="@drawable/launch_background"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
                <action android:name="FlutteR_NOTIFICATION_CLICK" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <!-- Don't delete the Meta-data below.
             This is used by the Flutter tool to generate GeneratedpluginRegistrant.java -->
        <Meta-data
            android:name="FlutterEmbedding"
            android:value="2" />
        <Meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-xxxxxxxxxxxxxxxxxxxxxxxxxx"/> 
       
            <!-- <Meta-data
            android:name="com.google.android.gms.games.APP_ID"
            android:value="@string/app_id" /> -->
        <!-- <Meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" /> -->
    </application>
</manifest>

我还尝试了以下方法

  1. 我跑了Flutter pub cache repair
  2. 我的原始项目是 Flutter + Kotlin 项目。由于集成本机 sdk 的代码仅在 Java 中可用,因此我通过将文件夹结构从 src/main/kotlin 移动到 src/main/java 将项目转换为 Java 项目,如下所述: Convert an existing Flutter Kotlin project to Flutter Java project

我已经坚持了 3 天多了。我搜索了几乎所有我在 SOF 上找到的黑屏解决方案,但无济于事。如果您有任何其他建议,请告诉我。谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?