2014-09-04 78 views
0

我想在我的Android应用程序运行背景音乐,但我得到的错误启动服务,以播放背景音乐时收到错误

如果我的问题格式不对,请大家指正

如何解决这个问题?

我有一个主要活动MainActivity:在服务活动BackgroundMusic

protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Intent svc=new Intent(this, BackgroundMusic.class); 
     startService(svc); 
} 

:在AndroidManifiest

package com.example.tttgame; 

import android.app.Service; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.os.IBinder; 
import android.util.Log; 
import android.widget.Toast; 

public class BackgroundMusic extends Service { 
    private static final String TAG = null; 
    MediaPlayer player; 
    public IBinder onBind(Intent arg0) { 

    return null; 
} 
@Override 
public void onCreate() { 
    super.onCreate(); 
    player = MediaPlayer.create(this, R.raw.music); 
    player.setLooping(true); // Set looping 
    player.setVolume(100,100); 

} 
public int onStartCommand(Intent intent, int flags, int startId) { 
    player.start(); 
    return 1; 
} 

public void onStart(Intent intent, int startId) { 
    // TO DO 
} 
public IBinder onUnBind(Intent arg0) { 
    // TO DO Auto-generated method 
    return null; 
} 

public void onStop() { 

} 
public void onPause() { 

} 
@Override 
public void onDestroy() { 
    player.stop(); 
    player.release(); 
} 

@Override 
public void onLowMemory() { 

} 

}

<activity 
     android:name="com.example.tttgame.BoardActivity" 
     android:label="@string/app_name" > 
    </activity> 
    <service android:enabled="true" android:name="com.example.tttgame.BackgroundMusic" /> 

</application> 

我的错误信息:

09-03 21:45:20.387: E/MainActivity(1392): starting Main Activity .. 
09-03 21:45:22.077: E/MainActivity(1392): checking if key 'flag' exists in preferences.. 
09-03 21:45:22.377: E/MediaPlayer(1392): Should have subtitle controller already set 
09-03 21:45:22.797: E/MediaPlayer(1392): error (1, -2147483648) 
09-03 21:45:22.837: E/AndroidRuntime(1392): FATAL EXCEPTION: main 
09-03 21:45:22.837: E/AndroidRuntime(1392): Process: com.example.tttgame, PID: 1392 
09-03 21:45:22.837: E/AndroidRuntime(1392): java.lang.RuntimeException: Unable to create service com.example.tttgame.BackgroundMusic: java.lang.NullPointerException 
09-03 21:45:22.837: E/AndroidRuntime(1392):  at android.app.ActivityThread.handleCreateService(ActivityThread.java:2563) 
09-03 21:45:22.837: E/AndroidRuntime(1392):  at android.app.ActivityThread.access$1700(ActivityThread.java:135) 
09-03 21:45:22.837: E/AndroidRuntime(1392):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1479) 
09-03 21:45:22.837: E/AndroidRuntime(1392):  at android.os.Handler.dispatchMessage(Handler.java:102) 
09-03 21:45:22.837: E/AndroidRuntime(1392):  at android.os.Looper.loop(Looper.java:137) 
09-03 21:45:22.837: E/AndroidRuntime(1392):  at android.app.ActivityThread.main(ActivityThread.java:4998) 
09-03 21:45:22.837: E/AndroidRuntime(1392):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-03 21:45:22.837: E/AndroidRuntime(1392):  at java.lang.reflect.Method.invoke(Method.java:515) 
09-03 21:45:22.837: E/AndroidRuntime(1392):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 
09-03 21:45:22.837: E/AndroidRuntime(1392):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 
09-03 21:45:22.837: E/AndroidRuntime(1392):  at dalvik.system.NativeStart.main(Native Method) 
09-03 21:45:22.837: E/AndroidRuntime(1392): Caused by: java.lang.NullPointerException 
09-03 21:45:22.837: E/AndroidRuntime(1392):  at com.example.tttgame.BackgroundMusic.onCreate(BackgroundMusic.java:21) 
09-03 21:45:22.837: E/AndroidRuntime(1392):  at android.app.ActivityThread.handleCreateService(ActivityThread.java:2553) 
09-03 21:45:22.837: E/AndroidRuntime(1392):  ... 10 more 
+0

我认为你的问题很好。 – 2014-09-04 02:06:13

+0

我不确定,但是从意向访问'R'? – 2014-09-04 02:13:34

回答

0
player = MediaPlayer.create(this, R.raw.music); 

我想是因为错误是显示java.lang.NullPointerException

+0

你建议我改变什么? – amjazzed 2014-09-04 03:39:48

0

看看我班的声音,并采取这是问题 参考。

public class SoundService extends Service { 

private static MediaPlayer player; 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public void onStart(Intent intent, int startId) { 

    try { 
     if (player != null) { 
      player.stop(); 
      player.release(); 
      player= null; 
     } 

     player = MediaPlayer.create(this, R.raw.background); 
     player.setLooping(true); 
     player.start(); 
    } catch (Exception e) { 
    } 
} 

public static boolean isMediaPlaying() { 
    if (player != null) { 
     try { 
      return player.isPlaying(); 
     } catch (Exception e) { 
     } 
    } 

    return false; 
} 

@Override 
public void onDestroy() { 
    if (player!= null) { 
     player.stop(); 
     player.release(); 
     player = null; 
    } 

    super.onDestroy(); 
} 

}

我已经realesed媒体播放器在调用onStart,如果它已经存在。并且不需要使用onstart命令。

+0

不要默默地忽略异常,至少要打印出来。你也建议它可以在'onStart'中工作,但不能'onCreate'? – 2014-09-04 08:18:11