我刚开始学习如何通过一些代码示例创建简单的android应用程序。试图在后台运行服务
我拿了一个音频捕获代码的例子,只使用了一个活动,并希望添加一个服务。以便用户从视图中单击一个按钮,然后活动将开始/停止录音服务。
目标是用户将进入该应用程序,点击“开始”按钮,然后服务将开始,并将永远保持在后台,直到他返回到应用程序并点击“停止”。
问题是,无论何时我离开应用程序并打开“最近使用的应用程序”并滑出我的应用程序,出于某种原因,我可以看到Congrats! MyService Created
和My Service Started
消息。我不知道为什么,当我滑出了最近使用的应用菜单的服务正在重新启动,我希望它是继续运行或接近..
record.java(活动):
package com.example.recordtocloud;
import java.io.File;
import java.io.IOException;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.content.Intent;
import android.app.Activity;
import android.os.Bundle;
public class record extends Activity {
/**
* Called when the activity is first created.
*/
private Button start,stop,play;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button)findViewById(R.id.button1);
stop = (Button)findViewById(R.id.button2);
play = (Button)findViewById(R.id.button3);
//stop.setEnabled(false);
//play.setEnabled(false);
}
public void start(View view){
startService(new Intent(this, recordbg.class));
//start.setEnabled(false);
//stop.setEnabled(true);
//Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show();
}
public void stop(View view){
stopService(new Intent(this, recordbg.class));
//stop.setEnabled(false);
//play.setEnabled(true);
//Toast.makeText(getApplicationContext(), "Audio recorded successfully",
//Toast.LENGTH_LONG).show();
}
public void play(View view) throws IllegalArgumentException,
SecurityException, IllegalStateException, IOException{
MediaPlayer m = new MediaPlayer();
m.setDataSource(Environment.getExternalStorageDirectory().
getAbsolutePath() + "/myrecording.3gp");
m.prepare();
m.start();
Toast.makeText(getApplicationContext(), "Playing audio", Toast.LENGTH_LONG).show();
}
}
recordbg.java(服务):
package com.example.recordtocloud;
import android.app.Service;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.Environment;
import android.os.IBinder;
import android.widget.Toast;
import android.util.Log;
import java.io.IOException;
public class recordbg extends Service {
private MediaRecorder myAudioRecorder;
private String outputFile = null;
private static final String TAG = "recordbg";
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, "Congrats! MyService Created", Toast.LENGTH_LONG).show();
Log.d(TAG, "onCreate");
outputFile = Environment.getExternalStorageDirectory().
getAbsolutePath() + "/myrecording.3gp";
myAudioRecorder = new MediaRecorder();
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
myAudioRecorder.setOutputFile(outputFile);
}
@Override
public void onStart(Intent intent, int startId) {
Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
Log.d(TAG, "onStart");
try {
myAudioRecorder.prepare();
myAudioRecorder.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onDestroy() {
Toast.makeText(this, "MyService Stopped", Toast.LENGTH_LONG).show();
Log.d(TAG, "onDestroy");
myAudioRecorder.stop();
myAudioRecorder.release();
myAudioRecorder = null;
}
}
你能告诉我,如果我上面列出的服务目前“前景”?此外,为什么当我从“最近使用的应用”菜单中删除应用时,我看到了“已创建服务”和“已启动服务”消息? – 2014-12-06 11:03:04
没有您的服务不在前台。也许操作系统正在查杀并重新启动你的应用程序。另外你必须实现onStartCommand(),看看我的更新。 – greywolf82 2014-12-06 11:07:00