Skip to content

Attempt to invoke virtual method 'void android.app.Activity.requestPermissions(java.lang.String[], int)' on a null object reference #56

@mastirt

Description

@mastirt

I am creating audio recognition using teachable machine from audio files that have been recorded in wav form. When I have finished recording the plugin does not want to detect the sound. Even though all permissions have been given. How to solve this problem?

Future<void> _requestBasicPermissions() async {
    // Request permissions one at a time to avoid conflicts
    if (await Permission.notification.isDenied) {
      await Permission.notification.request();
    }

    // Add delay between requests to prevent conflicts
    await Future.delayed(Duration(milliseconds: 200));

    if (await Permission.location.isDenied) {
      await Permission.location.request();
    }

    await Future.delayed(Duration(milliseconds: 200));

    if (await Permission.microphone.isDenied) {
      await Permission.microphone.request();
    }

    await Future.delayed(Duration(milliseconds: 200));

    if (await Permission.manageExternalStorage.isDenied) {
      await Permission.manageExternalStorage.request();
    }
  }
//Example values for Google teachable models
      result = TfliteAudio.startFileRecognition(
        sampleRate: 44100,
        audioDirectory: _filePath!,
      );

      // Mendengarkan hasil pengenalan
      result?.listen((event) {
        print("Recognition Event: ${event['hasPermission']}");
        String recognition = event["recognitionResult"];
        if (recognition.isEmpty || !recognition.contains(" ")) {
          print("Invalid recognition result: $recognition");
          return;
        }
        double confidence = double.parse(recognition.split(" ")[0]); // Ambil confidence dari hasil prediksi
        String predictedLabel = recognition.split(" ")[1]; // Ambil label dari hasil prediksi

        setState(() {
          // Tampilkan hasil prediksi jika confidence di atas 80%, jika tidak tampilkan "Listening..."
          if (confidence > 0.95) {
            _sound = predictedLabel;
          } else {
            _sound = "Listening...";
          }
        });
      }).onDone(() {
        // Jika stream selesai, restart pengenalan suara
        print('Hasil Teachable Machine : $_sound');
      });
I/flutter (19343): Recording stopped.
D/TfliteAudio(19343): Parameters: {audioDirectory=/storage/emulated/0/Android/data/com.sss.saveme/files/audio_record.wav, detectionThreshold=0.3, minimumTimeBetweenSamples=0, method=setFileRecognitionStream, averageWindowDuration=0, audioLength=0, sampleRate=44100, suppressionTime=0}
I/flutter (19343): Hasil dari Result :Instance of '_MapStream<Map<dynamic, dynamic>, Map<dynamic, dynamic>>'
I/flutter (19343): apa suara tinggi false rekaman ke 0
I/flutter (19343): amplitude 182.6059755130097
I/flutter (19343): Saving high amplitude recording
I/flutter (19343): Hasil amplitude: true
I/flutter (19343): Prediksi kata 'tolong'
I/flutter (19343): Bahasa id
I/flutter (19343): Correct keyword detected: tolong
D/TfliteAudio(19343): AudioLength has been readjusted. Length: 44032
D/TfliteAudio(19343): Transpose Audio: false
D/TfliteAudio(19343): Check for permission. Request code: 1
D/TfliteAudio(19343): Permission requested.
E/EventChannel#FileRecognitionStream(19343): Failed to open event stream
E/EventChannel#FileRecognitionStream(19343): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.requestPermissions(java.lang.String[], int)' on a null object reference
E/EventChannel#FileRecognitionStream(19343): 	at androidx.core.app.ActivityCompat$Api23Impl.requestPermissions(ActivityCompat.java:904)
E/EventChannel#FileRecognitionStream(19343): 	at androidx.core.app.ActivityCompat.requestPermissions(ActivityCompat.java:545)
E/EventChannel#FileRecognitionStream(19343): 	at flutter.tflite_audio.TfliteAudioPlugin.requestPermission(TfliteAudioPlugin.java:428)
E/EventChannel#FileRecognitionStream(19343): 	at flutter.tflite_audio.TfliteAudioPlugin.checkPermissions(TfliteAudioPlugin.java:407)
E/EventChannel#FileRecognitionStream(19343): 	at flutter.tflite_audio.TfliteAudioPlugin.onListen(TfliteAudioPlugin.java:252)
E/EventChannel#FileRecognitionStream(19343): 	at io.flutter.plugin.common.EventChannel$IncomingStreamRequestHandler.onListen(EventChannel.java:218)
E/EventChannel#FileRecognitionStream(19343): 	at io.flutter.plugin.common.EventChannel$IncomingStreamRequestHandler.onMessage(EventChannel.java:197)
E/EventChannel#FileRecognitionStream(19343): 	at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:292)
E/EventChannel#FileRecognitionStream(19343): 	at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:319)
E/EventChannel#FileRecognitionStream(19343): 	at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
E/EventChannel#FileRecognitionStream(19343): 	at android.os.Handler.handleCallback(Handler.java:942)
E/EventChannel#FileRecognitionStream(19343): 	at android.os.Handler.dispatchMessage(Handler.java:99)
E/EventChannel#FileRecognitionStream(19343): 	at android.os.Looper.loopOnce(Looper.java:211)
E/EventChannel#FileRecognitionStream(19343): 	at android.os.Looper.loop(Looper.java:300)
E/EventChannel#FileRecognitionStream(19343): 	at android.app.ActivityThread.main(ActivityThread.java:8395)
E/EventChannel#FileRecognitionStream(19343): 	at java.lang.reflect.Method.invoke(Native Method)
E/EventChannel#FileRecognitionStream(19343): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:559)
E/EventChannel#FileRecognitionStream(19343): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:954)

======== Exception caught by services library ======================================================
The following PlatformException was thrown while activating platform stream on channel FileRecognitionStream:
PlatformException(error, Attempt to invoke virtual method 'void android.app.Activity.requestPermissions(java.lang.String[], int)' on a null object reference, null, null)

When the exception was thrown, this was the stack: 
#0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:648:7)
#1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:334:18)
<asynchronous suspension>
#2      EventChannel.receiveBroadcastStream.<anonymous closure> (package:flutter/src/services/platform_channel.dart:676:9)
<asynchronous suspension>
====================================================================================================

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions