Dart - MissingPluginException(No implementation found for method on channel media_scanner)

156 Views Asked by At

Kotlin:

            import io.flutter.embedding.android.FlutterActivity
            ///
            import android.util.Log
            import android.media.MediaScannerConnection
            import io.flutter.embedding.engine.FlutterEngine
            import io.flutter.plugin.common.MethodChannel
            import java.io.File
            import android.os.Bundle
            import io.flutter.plugins.GeneratedPluginRegistrant



            class MainActivity: FlutterActivity() {

            //   override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
            //     super.configureFlutterEngine(flutterEngine)
            //         // GeneratedPluginRegistrant.registerWith(flutterEngine) // add this line
            // flutterEngine.getPlugins()

            // }
                val CHANNEL = "media_scanner"
            ///
            override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
                super.configureFlutterEngine(flutterEngine)
                ///
            GeneratedPluginRegistrant.registerWith(FlutterEngine(this));
            ///
            //  GeneratedPluginRegister.registerGeneratedPlugins(FlutterEngine(this));
                MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
                    .setMethodCallHandler { call, result ->
                        Log.d("MethodChannel", "Method called: ${call.method}")
                        when (call.method) {
                            "scanFile" -> {
                                val filePath = call.argument<String>("filePath")
                                filePath?.let {
                                    MediaScannerConnection.scanFile(this, arrayOf(filePath), null) { _, _ ->
                                        result.success(null)
                                    }
                                } ?: result.error("INVALID_PATH", "Invalid file path", null)
                            }
                            // "scanDirectory" -> {
                            //     try {
                            //         val directoryPath = call.argument<String>("directoryPath")
                            //         Log.d("MethodChannel", "Scanning directory: $directoryPath")
                            //         directoryPath?.let {
                            //             scanDirectory(directoryPath)
                            //             result.success(null)
                            //         } ?: result.error("INVALID_PATH", "Invalid directory path", null)
                            //     } catch (e: Exception) {
                            //         Log.e("MethodChannel", "Error scanning directory", e)
                            //         result.error("ERROR", "Error scanning directory", e.localizedMessage)
                            //     }
                            // }
                            else -> result.notImplemented()
                        }
                    }
            }
            ///
                // private fun scanDirectory(path: String) {
                //     val directory = File(path)
                //     val files = directory.listFiles()
                //     files?.forEach { file ->
                //         if (file.isFile) {
                //             MediaScannerConnection.scanFile(this, arrayOf(file.absolutePath), null, null)
                //         }
                //     }
                // }
            }

Dart:

class MediaScanner {
///
static const MethodChannel _channel = MethodChannel('media_scanner');

static Future<void> scanFile(String filePath) async {
  await _channel.invokeMethod('scanFile', {'filePath': filePath});
 }

 static Future<void> scanDirectory(String directoryPath) async {
   await _channel
    .invokeMethod('scanDirectory', {'directoryPath': directoryPath});
}

///
} 

For some reason I keep getting the error MissingPluginException(No implementation found for method scanDirectory on channel media_scanner) What am I missing here? I have tried the usual, cleaning, rebuilding etc. Didn't work.

AndroidManifest:

                <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                package="com.adityanawandar.shotbycamera">

                    <!-- Permissions for file storage access -->
            <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
                <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
                <uses-permission android:name="android.permission.CAMERA"/>
                <uses-permission android:name="android.permission.WAKE_LOCK" />
                <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
                <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
                <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
                <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>

            <application
                    android:requestLegacyExternalStorage="true"
                    android:label="ShotByCamera"
                    android:name="${applicationName}"
                    android:icon="@mipmap/ic_launcher">
                    <activity
                        android:name=".MainActivity"
                        android:exported="true"
                        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">
                        <!-- 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. After that, this theme continues
                            to determine the Window background behind the Flutter UI. -->
                        <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>
                            <service
                        android:name="id.flutter.flutter_background_service.BackgroundService"
                        android:foregroundServiceType="dataSync"
                    />
                    <!-- 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>
            </manifest>
0

There are 0 best solutions below