最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

just audio - Flutter: just_audio_background wrong Activity in Manifest issue - Stack Overflow

programmeradmin2浏览0评论

I'm encountering the following error after adding the just_audio_background package to my Flutter project:

`E/flutter (13120): [ERROR:flutter/runtime/dart_vm_initializer(40)] Unhandled Exception: PlatformException(The Activity class declared in your AndroidManifest.xml is wrong or has not provided the correct FlutterEngine. Please see the README for instructions., null, null, null)`

I have tried several fixes (including suggestions from documentation and various AI models), but nothing seems to work. Below are the relevant parts of my project:

<manifest xmlns:android=";>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    <!-- ALSO ADD THIS PERMISSION IF TARGETING SDK 34 -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>

    <application
        android:label="apd_killer"
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:taskAffinity=""
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <!-- Specifies an Android theme to apply to this Activity as soon as
                 the Android process has started. This theme is visible to the user
                 while the Flutter UI initializes. -->
            <meta-data
                android:name="io.flutter.embedding.android.NormalTheme"
                android:resource="@style/NormalTheme"/>
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </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"/>
    </application>
    <!-- Required to query activities that can process text -->
    <queries>
        <intent>
            <action android:name="android.intent.action.PROCESS_TEXT"/>
            <data android:mimeType="text/plain"/>
        </intent>
    </queries>
</manifest>

in paml :

dependencies:
  flutter:
    sdk: flutter
  just_audio: ^0.9.42
  just_audio_background: ^0.0.1-beta.15
  permission_handler: ^11.3.1
  # ... other dependencies

MainActivity.kt:

package com.example.apd_killer

import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity()

**main.dart : **

import 'package:apd_killer/preferences_manager.dart';
import 'package:apd_killer/screens/preparation_screen.dart';
import 'package:apd_killer/screens/home_screen.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:just_audio_background/just_audio_background.dart';
import 'package:permission_handler/permission_handler.dart';

import 'screens/disclaimer_screen.dart';
import 'screens/sound_therapy_screen.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // await requestPermissions(); // Request permissions before app starts
  await PreferencesManager().init(); // Initialize PreferencesManager
  PreferencesManager().enableLogs(); // enableLogs() or disableLogs()

  await JustAudioBackground.init(
    androidNotificationChannelId: 'com.example.apd_killer',
    androidNotificationChannelName: 'Audio playback',
    androidNotificationOngoing: true,
  );

  runApp(const ProviderScope(child: AudioCardioApp()));
}

class AudioCardioApp extends StatelessWidget {
  const AudioCardioApp({super.key});

  Future<Widget> _getInitialScreen() async {
    await requestPermissions();

    // Use PreferencesManager to retrieve preferences
    bool disclaimerAccepted = PreferencesManager().getDisclaimerAccepted();
    bool assessmentDone = PreferencesManager().getAssessmentDone();

    if (assessmentDone == true) {
      return HomeScreen();
    } else if (disclaimerAccepted == true) {
      return const PreparationScreen();
    } else {
      return const DisclaimerScreen();
    }
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<Widget>(
      future: _getInitialScreen(),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return const MaterialApp(
            home: Scaffold(
              body: Center(child: CircularProgressIndicator()),
            ),
          );
        } else if (snapshot.hasData) {
          return MaterialApp(
            title: 'AudioCardio',
            theme: ThemeData(
              colorScheme: ColorScheme(
                brightness: Brightness.light,
                primary: Colors.blue,
                onPrimary: Colors.white,
                secondary: Colors.orange,
                onSecondary: Colors.white,
                error: Colors.red,
                onError: Colors.white,
                surface: Colors.grey[200]!,
                onSurface: Colors.black,
              ),
            ),
            home: snapshot.data!,
          );
        } else {
          return const MaterialApp(
            home: Scaffold(
              body: Center(child: Text('Error loading initial screen')),
            ),
          );
        }
      },
    );
  }
}

// Permission handling function
Future<void> requestPermissions() async {
  await Permission.microphone.request();
  await Permission.notification.request();
  // Request foreground service permission for Android 12+
  if (await Permission.manageExternalStorage.request().isGranted) {
    // await Permission.foregroundService.request();
  }
}

Error Log:

Running Gradle task 'assembleDebug'... 37.9s
√ Built build/app/outputs/flutter-apk/app-debug.apk
Installing build/app/outputs/flutter-apk/app-debug.apk... 21.6s
I/flutter (13120): [IMPORTANT:flutter/shell/platform/android/android_context_vk_impeller(60)] Using the Impeller rendering backend (Vulkan).
I/flutter (13120): [IMPORTANT:flutter/shell/platform/android/android_context_vk_impeller(60)] Using the Impeller rendering backend (Vulkan).
E/flutter (13120): [ERROR:flutter/runtime/dart_vm_initializer(40)] Unhandled Exception: PlatformException(The Activity class declared in your AndroidManifest.xml is wrong or has not provided the correct FlutterEngine. Please see the README for instructions., null, null, null)
E/flutter (13120): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:646:7)
E/flutter (13120): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:334:18)
E/flutter (13120): <asynchronous suspension>
E/flutter (13120): #2      MethodChannelAudioService.configure (package:audio_service_platform_interface/method_channel_audio_service.dart:14:5)
E/flutter (13120): <asynchronous suspension>
E/flutter (13120): #3      AudioService.init (package:audio_service/audio_service.dart:1015:5)
E/flutter (13120): <asynchronous suspension>
E/flutter (13120): #4      _JustAudioBackgroundPlugin.setup (package:just_audio_background/just_audio_background.dart:97:21)
E/flutter (13120): <asynchronous suspension>
E/flutter (13120): #5      JustAudioBackground.init (package:just_audio_background/just_audio_background.dart:53:5)
E/flutter (13120): <asynchronous suspension>
E/flutter (13120): #6      main (package:apd_killer/main.dart:17:3)
E/flutter (13120): <asynchronous suspension>

发布评论

评论列表(0)

  1. 暂无评论