Browse Source

android: use singleton MediaPlayer object. no need to create one each time

Wei Mingzhi 7 years ago
parent
commit
badec7f458

+ 1 - 6
android/app/src/main/cpp/android_jni.cpp

@@ -223,12 +223,7 @@ void* JNI_mediaplayer_load(const char *filename)
 EXTERN_C_LINKAGE
 void JNI_mediaplayer_free(void *player)
 {
-    JNIEnv* env = getJNIEnv();
-    jclass clazz = env->FindClass("android/media/MediaPlayer");
-    // The MediaPlayer object should be placed to the 'End' state before freed
-    env->CallVoidMethod((jobject)player, env->GetMethodID(clazz, "release", "()V"));
-    env->DeleteLocalRef(clazz);
-    env->DeleteGlobalRef((jobject)player);
+    getJNIEnv()->DeleteGlobalRef((jobject)player);
 }
 
 EXTERN_C_LINKAGE

+ 4 - 2
android/app/src/main/java/com/sdlpal/sdlpal/PalActivity.java

@@ -19,15 +19,17 @@ public class PalActivity extends SDLActivity {
 
     private static MediaPlayer JNI_mediaplayer_load(String filename){
         Log.v(TAG, "loading midi:" + filename);
-        MediaPlayer mediaPlayer = new MediaPlayer();
+        if (mediaPlayer == null) {
+            mediaPlayer = new MediaPlayer();
+        }
         mediaPlayer.reset();
         try {
             mediaPlayer.setDataSource(mSingleton.getApplicationContext(), Uri.fromFile(new File(filename)));
+            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
             mediaPlayer.prepare();
         } catch(IOException e) {
             Log.e(TAG, filename + " not available for playing, check");
         }
-        PalActivity.mediaPlayer = mediaPlayer;
         return mediaPlayer;
     }