Java 在后台几秒钟后关闭服务(媒体播放器),尽管我将媒体播放器作为一项服务来实现?
我正在制作一个应用程序来从url流式播放mp3。我可以毫无问题地播放和停止媒体然后我尝试将媒体播放器作为服务运行。但是流媒体在几秒钟后停止。我不知道出了什么问题。 请帮我解决这个问题。非常感谢。下面是我的java文件 这是MainActivity.java文件Java 在后台几秒钟后关闭服务(媒体播放器),尽管我将媒体播放器作为一项服务来实现?,java,android,android-service,Java,Android,Android Service,我正在制作一个应用程序来从url流式播放mp3。我可以毫无问题地播放和停止媒体然后我尝试将媒体播放器作为服务运行。但是流媒体在几秒钟后停止。我不知道出了什么问题。 请帮我解决这个问题。非常感谢。下面是我的java文件 这是MainActivity.java文件 package com.example.yomal.rathumakarafm; import android.content.Intent; import android.media.AudioManager; import andr
package com.example.yomal.rathumakarafm;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.ImageButton;
import java.io.IOException;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private ImageButton buttonStart;
private ImageButton buttonStop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonStart = (ImageButton) findViewById(R.id.buttonStart);
buttonStop = (ImageButton)findViewById(R.id.buttonSop);
buttonStart.setOnClickListener(this);
buttonStop.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v == buttonStart){
startService(new Intent(this, RathuMakara.class));
}
else if (v == buttonStop){
stopService(new Intent(this, RathuMakara.class));
}
}
}
这是服务类文件,它是RathuMakara.java
package com.example.yomal.rathumakarafm;
import android.app.Service;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.support.annotation.Nullable;
import java.io.IOException;
public class RathuMakara extends Service {
private MediaPlayer rathu;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startID) {
String url = "http://206.189.34.189:8000/rathumakara.mp3";
MediaPlayer rathu = new MediaPlayer();
rathu.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
rathu.setDataSource(url);
try {
rathu.prepare();
} catch (IOException e) {
e.printStackTrace();
}
rathu.start();
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
}
return START_STICKY;
}
@Override
public void onDestroy() {
rathu.stop();
}
}
这是activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_marginTop="0dp"
android:orientation="horizontal"
android:layout_gravity="center_horizontal"
android:layout_weight="1">
<ImageButton
android:id="@+id/buttonStart"
android:layout_width="66dp"
android:layout_height="68dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="120dp"
android:background="@drawable/play"
android:backgroundTint="@color/colorAccent"
android:padding="10dp" />
<ImageButton
android:id="@+id/buttonSop"
android:layout_width="65dp"
android:layout_height="66dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="20dp"
android:background="@drawable/stop"
android:backgroundTint="@color/colorAccent" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
这是AndroidManifest文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yomal.rathumakarafm">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/logo_round"
android:label="@string/app_name"
android:roundIcon="@drawable/logo_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".SplashActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity"></activity>
<service android:name=".RathuMakara"
android:label="Rathu Makara"
android:process=":remote"/>
</application>
</manifest>
系统正在终止您的服务以释放资源。要使您的应用程序具有“更高的优先级”,请改用。您是否尝试播放本地音乐文件以查看问题是否与您的代码或流媒体部分有关?我尝试了另一个流媒体链接;它也会在几秒钟后在后台停止。您可以尝试prepareAsync()而不是prepare()?另外,我不确定您是否需要与清单中所述的不同的流程。很抱歉,我不理解此prepareAsync()?是否在停止时调用onDestroy()
?如果是这样,操作系统只是因为资源不足而停止您的服务。试着把它改成一个。我有另一个问题,我会单独发布。请帮帮我。非常感谢。我将为你标记链接。