【问题标题】:Not able to check Android Service Issue无法检查 Android 服务问题
【发布时间】:2016-12-01 12:50:19
【问题描述】:

我想做的只是通过服务控制我的应用中的背景音乐,这样我就可以在任何活动中启动它并停止它。

当我在启动和销毁服务时告诉 Toast 服务时,我的所有设置都完美无缺,但只要我将媒体播放放在那里,它就可以正常启动并开始播放音乐,但只要点击一下停止服务的按钮我收到错误并强制关闭。

谁能建议我做错了什么?

这是我的代码:

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

public class MyService extends Service {

private MediaPlayer player;

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

@Override    
publicvoid onCreate() { 
super.onCreate(); 
Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
MediaPlayer player = MediaPlayer.create(MyService.this, R.raw.oceanwavestest);
player.start();
player.setLooping(true);

}

   @Override    
   publicvoid onDestroy() {
   super.onDestroy();
   player.stop();
   Toast.makeText(this, "Service Stopped", Toast.LENGTH_SHORT).show();
   } 
} 

【问题讨论】:

  • 使用 DDMS、adb logcat 或 Eclipse 中的 DDMS 透视图来检查 Java 堆栈跟踪是否存在崩溃,以确定哪里出了问题。

标签: java android service media-player


【解决方案1】:

如果我在你的位置上,我会在你的代码中看到一些东西。

  • 您试图在 onDestroy 中对成员 MediaPlayer 对象“player”调用“stop”,但在 onCreate 中,您使用代码行创建了一个 MediaPlayer 对象“player”

"MediaPlayer 播放器 = MediaPlayer.create(MyService.this, R.raw.oceanwavestest);"

我相信这会创建一个玩家对象,您将失去函数之外的范围。

此代码的 1 行修复是只使用“player = MediaPlayer.create(MyService.this, R.raw.oceanwavestest);”,这样使用成员变量而不是局部变量

如果这是我的代码,我会将成员变量更改为 m_player 或 mPlayer 之类的名称,以便您知道它是代码中的成员变量。

  • (可能是错字)“returnnull;”在 onBind 中应该是“return null;”

  • 您可能还想尝试调用

播放器.stop(); Toast.makeText(this, "服务已停止", Toast.LENGTH_SHORT).show();

在调用 super.onDestroy() 之前

让我知道这是否有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多