如何解决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>
我还尝试了以下方法:
- 我跑了
Flutter pub cache repair
- 我的原始项目是 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 举报,一经查实,本站将立刻删除。