Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在后台播放WebView音频_Android_Audio_Webview - Fatal编程技术网

Android 在后台播放WebView音频

Android 在后台播放WebView音频,android,audio,webview,Android,Audio,Webview,我正在为我的网站制作一个android应用程序。它有一些有点像播客的视频。我希望应用程序能够在用户锁定屏幕或使用其他应用程序时在后台播放音频。为了实现这一点,我准备了一个WebView。为了提供上述功能,我尝试在活动中使用部分唤醒锁定。这仅在屏幕锁定时继续播放音频,但在按下home(主页)按钮时(即在后台)不会继续播放音频。这个问题有解决办法吗 如果你想让你的应用程序即使在后台也能继续运行音频,你必须在单独的服务中运行Mediaplayer。 即使应用程序转到后台或返回,此服务仍将继续运行。 如

我正在为我的网站制作一个android应用程序。它有一些有点像播客的视频。我希望应用程序能够在用户锁定屏幕或使用其他应用程序时在后台播放音频。为了实现这一点,我准备了一个WebView。为了提供上述功能,我尝试在活动中使用部分唤醒锁定。这仅在屏幕锁定时继续播放音频,但在按下home(主页)按钮时(即在后台)不会继续播放音频。这个问题有解决办法吗

如果你想让你的应用程序即使在后台也能继续运行音频,你必须在
单独的服务中运行Mediaplayer。

即使应用程序转到后台或返回,此服务仍将继续运行。
如果应用程序被终止,你甚至可以编写一个粘性服务来保持运行(前台为true)。

如果你想让你的应用程序即使在后台也继续运行音频,你必须在一个
单独的服务中运行Mediaplayer。

即使应用程序转到后台或返回,此服务仍将继续运行。
如果应用程序被终止,您甚至可以编写一个粘性服务来保持运行(前台为true)。

您应该使用android服务来播放与您的活动无关的音乐。请看以下示例:

以下是我的Android服务类:

class MusicService extends Service implements OnCompletionListener {
  MediaPlayer mediaPlayer;

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

  @Override
  public void onCreate() {
    mediaPlayer = MediaPlayer.create(this, R.raw.s);// raw/s.mp3
    mediaPlayer.setOnCompletionListener(this);
  }

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    if (!mediaPlayer.isPlaying()) {
      mediaPlayer.start();
    }
    return START_STICKY;
  }

  public void onDestroy() {
    if (mediaPlayer.isPlaying()) {
      mediaPlayer.stop();
    }
    mediaPlayer.release();
}

  public void onCompletion(MediaPlayer _mediaPlayer) {
    stopSelf();
  }

}
以下是活动:

public class MusicActivity extends Activity implements OnClickListener {

  Button startPlaybackButton, stopPlaybackButton;
  Intent playbackServiceIntent;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    startPlaybackButton = (Button) this.findViewById(R.id.StartPlaybackButton);
    stopPlaybackButton = (Button) this.findViewById(R.id.StopPlaybackButton);

    startPlaybackButton.setOnClickListener(this);
    stopPlaybackButton.setOnClickListener(this);

    playbackServiceIntent = new Intent(this,MusicService.class);
  }

  public void onClick(View v) {
    if (v == startPlaybackButton) {
      startService(playbackServiceIntent);
      finish();
    } else if (v == stopPlaybackButton) {
      stopService(playbackServiceIntent);
      finish();
    }
  }
}
请不要忘记在清单文件中添加服务:

<service android:enabled="true" android:name=".services.MusicService" />

您应该使用android服务来播放与您的活动无关的音乐。请看以下示例:

以下是我的Android服务类:

class MusicService extends Service implements OnCompletionListener {
  MediaPlayer mediaPlayer;

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

  @Override
  public void onCreate() {
    mediaPlayer = MediaPlayer.create(this, R.raw.s);// raw/s.mp3
    mediaPlayer.setOnCompletionListener(this);
  }

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    if (!mediaPlayer.isPlaying()) {
      mediaPlayer.start();
    }
    return START_STICKY;
  }

  public void onDestroy() {
    if (mediaPlayer.isPlaying()) {
      mediaPlayer.stop();
    }
    mediaPlayer.release();
}

  public void onCompletion(MediaPlayer _mediaPlayer) {
    stopSelf();
  }

}
以下是活动:

public class MusicActivity extends Activity implements OnClickListener {

  Button startPlaybackButton, stopPlaybackButton;
  Intent playbackServiceIntent;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    startPlaybackButton = (Button) this.findViewById(R.id.StartPlaybackButton);
    stopPlaybackButton = (Button) this.findViewById(R.id.StopPlaybackButton);

    startPlaybackButton.setOnClickListener(this);
    stopPlaybackButton.setOnClickListener(this);

    playbackServiceIntent = new Intent(this,MusicService.class);
  }

  public void onClick(View v) {
    if (v == startPlaybackButton) {
      startService(playbackServiceIntent);
      finish();
    } else if (v == stopPlaybackButton) {
      stopService(playbackServiceIntent);
      finish();
    }
  }
}
请不要忘记在清单文件中添加服务:

<service android:enabled="true" android:name=".services.MusicService" />


但我认为您不能在单独的服务线程中运行WebView,因为它是一个UI元素。@NathanMatthews您是否将音频暂停在onPause方法中的某个位置。理想情况下,如果您刚刚按下home按钮,它应该继续播放。但我认为您不能在单独的服务线程中运行WebView,因为它是一个UI元素。@NathanMatthews您是否在onPause方法中的某个位置暂停该音频。理想情况下,如果您刚刚按下home(主页)按钮,它应该会继续播放。我正在获取使用media player播放音频的答案。我希望在webview上播放视频,并继续在后台播放音频。谢谢您的帮助!我用服务解决了这个问题。我已经实现了一个单独的服务来运行webView,我仍然有这个问题。关于如何正确地做这件事还有什么线索吗?我正在得到关于用媒体播放器播放音频的答案。我希望在webview上播放视频,并继续在后台播放音频。谢谢您的帮助!我用服务解决了这个问题。我已经实现了一个单独的服务来运行webView,我仍然有这个问题。关于如何正确执行此操作,是否还有其他线索?我希望在webview上播放视频并继续在后台播放音频。我希望在webview上播放视频并继续在后台播放音频。