我正在用exoplayer构建音乐播放器。我正在使用单独的服务来播放音乐,但问题是,即使我通过浏览最近的曲目来关闭主要活动,音乐仍会继续播放。我试图通过在调用onDestroy()时停止服务来解决此问题。但是,当按下后退按钮时,这也会停止音乐服务。我检查了Musixmatch中的两种情况,如果您从最近关闭应用程序,它不会停止,但是当您按应用程序中的“后退”按钮时,它不会停止,即使我看到再次启动该应用程序时又创建了主要活动。那么如何在我的应用程序中实现相同的目标?
答案 0 :(得分:0)
我有一个示例android声音项目-当我转到“最近”并“全部关闭”时,我的音频停止播放。并使用goBack-您可以暂停,但如果不暂停,它将继续播放。
#include <stdio.h>
/* read the next byte from the C source file, handing escaped newlines */
int getcpp(FILE *fp) {
int ch;
while ((ch = getc(fp)) == '\\') {
if ((ch = getc(fp)) != '\n') {
ungetc(ch, fp);
return '\\';
}
}
return ch;
}
/* read and write character and string constants */
int skipstr(int cch, FILE *fp, FILE *ft) {
int ch;
putc(cch, ft);
while ((ch = getcpp(fp)) != EOF) {
putc(ch, ft);
if (ch == cch)
return 0;
if (ch == '\\') {
if ((ch = getcpp(fp)) == EOF)
return EOF;
putc(ch, ft);
}
}
return EOF;
}
int main(int argc, char *argv[]) {
FILE *fp, *ft;
int ch;
if (argc < 3) {
fprintf(stderr, "Missing arguments. Need input and output filenames\n");
return 1;
}
if ((fp = fopen(argv[1], "r")) == NULL) {
fprintf(stderr, "Cannot open input file %s\n", argv[1]);
return 1;
}
if ((ft = fopen(argv[2], "w")) == NULL) {
fprintf(stderr, "Cannot open output file %s\n", argv[2]);
return 1;
}
while ((ch = getcpp(fp)) != EOF) {
if (ch == '\'' || ch == '"') {
if (skipstr(ch, fp, ft)) {
fprintf(stderr, "unterminated string or character constant\n");
break;
}
continue;
}
if (ch == '/') {
if ((ch = getcpp(fp)) == '*') {
/* multi-line comment */
int lastc = 0;
while ((ch = getcpp(fp)) != EOF) {
if (ch == '/' && lastc == '*') {
break;
}
lastc = ch;
}
if (ch == EOF) {
fprintf(stderr, "unterminated comment\n");
break;
}
ch = ' ';
} else if (ch == '/') {
/* single-line comment */
while ((ch = getcpp(fp)) != EOF && ch != '\n')
continue;
if (ch == EOF)
break;
} else {
putc('/', ft);
}
}
putc(ch, ft);
}
fclose(fp);
fclose(ft);
return 0;
}
答案 1 :(得分:0)
因此,当任务从最新消息中删除时,我们需要停止服务。为此,您可以看看"stop service when remove app through recent app"的解决方案。
基本上,它建议在调用public void onTaskRemoved(Intent rootIntent)
时停止服务。
1)。在清单中,在定义服务的位置添加stopWithTask属性:
<service
android:enabled="true"
android:name=".YourService"
android:exported="false"
android:stopWithTask="true" />
2)。如果上述方法无效,请反向操作
<service
android:enabled="true"
android:name=".MyService"
android:exported="false"
android:stopWithTask="false" /> //change to false
因此将调用服务的onTaskRemoved方法。 (请记住,如果将stopWithTask设置为true,则不会调用它。)
public class YourService extends Service {
@Override
public void onStartService() {
//your code
}
@Override
public void onTaskRemoved(Intent rootIntent) {
System.out.println("onTaskRemoved called");
super.onTaskRemoved(rootIntent);
//do something you want
//stop service
this.stopSelf();
}
}