我想通过使用网络视图选择它来在单独的服务中播放来自 youtube 视频的音频,但是当我单击播放时它会跳到 setOnCompletionListener 部分
我已经尝试将数据源设置为 Uri 而不是 Url 文件路径,但它仍然不起作用
在服务中播放音乐的类
package com.example.music_player;
import android.app.Service;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Environment;
import android.os.IBinder;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.IOException;
import java.util.ArrayList;
import static android.content.Intent.getIntent;
import static java.lang.String.valueOf;
public class MusicPlayer extends Service {
MediaPlayer mediaPlayer;
int i=0;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mediaPlayer=new MediaPlayer();
}
int length = 0;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int k=Integer.parseInt(intent.getStringExtra("position"));
final ArrayList<String> songs = intent.getStringArrayListExtra("songs");
String url;
//k's from -1 to 3 are for other settings to play songs from internal storage (skipping songs, pausing audio, etc)
if (k==1) {}
if (k==-1) {}
if (k==0) {}
if (k==2) {}
if (k==3) {}
if (k==4) {
mediaPlayer.stop();
mediaPlayer.reset();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
url=intent.getStringExtra("url");
try {
mediaPlayer.setDataSource(url);
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
Toast.makeText(getApplicationContext(),url,Toast.LENGTH_SHORT).show();
}
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
i++;
String test="test";
Toast.makeText(getApplicationContext(),test,Toast.LENGTH_SHORT).show();
if (i==songs.size()) {
i=0;
}
mediaPlayer.stop();
mediaPlayer.reset();
try {
mediaPlayer.setDataSource(songs.get(i));
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
}
});
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
mediaPlayer.release();
super.onDestroy();
}
}
按下按钮时显示 Web 视图并获取视频 URL 的类
package com.example.music_player;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;
import java.util.ArrayList;
public class Youtube_Source extends AppCompatActivity {
WebView youtube;
Button play;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_youtube__source);
youtube=findViewById(R.id.youtube);
youtube.loadUrl("https://www.youtube.com");
youtube.setWebViewClient(new WebViewClient());
WebSettings settings=youtube.getSettings();
settings.setJavaScriptEnabled(true);
Intent intent=getIntent();
//getting the list of songs from the internal memory from MainActivity
final ArrayList <String> songs=intent.getStringArrayListExtra("songs");
//Toast.makeText(this,String.valueOf(songs.size()),Toast.LENGTH_SHORT).show();
play=findViewById(R.id.button7);
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new Intent(Youtube_Source.this,MusicPlayer.class);
i.putExtra("url",youtube.getUrl());
i.putExtra("position",String.valueOf(4));
i.putStringArrayListExtra("songs",songs);
String url=youtube.getUrl();
//Toast.makeText(Youtube_Source.this,url,Toast.LENGTH_SHORT).show();
startService(i);
}
});
}
@Override
public void onBackPressed() {
if (youtube.canGoBack()) {
youtube.goBack();
}
else {
super.onBackPressed();
}
}
}