android 循环服务,android – 如何停止/启动包含创建无限循环的服务

因此,对于后台,我正在尝试创建一个通过麦克风连续记录并将数据存储在缓冲区中的应用程序.该程序的目标是对缓冲区中的数据执行某种类型的处理并对其进行操作.

目前,应用程序只是将数据读入缓冲区并尽快写入.当运行应用程序时,人们会对着麦克风说话,然后听到你刚刚说出来的另一端.

现在,我对Android的经验不足以开始发挥作用.我正在进行读写操作,这是一个无限循环.服务如下:

public class AudioService extends Service {

private final int MIC = AudioSource.MIC;

private final int SAMPLE = 44100;

private final int CHANNELI = AudioFormat.CHANNEL_IN_MONO;

private final int CHANNELO = AudioFormat.CHANNEL_OUT_MONO;

private final int FORMAT = AudioFormat.ENCODING_PCM_16BIT;

private final int BUFFERSIZE = AudioRecord.getMinBufferSize(SAMPLE,

CHANNELI, FORMAT);

private final int STREAM = AudioManager.STREAM_MUSIC;

private final int MODE = AudioTrack.MODE_STREAM;

private boolean play = true;

AudioRecord recorder = null;

AudioTrack track = null;

short[] buffer = null;

public void OnCreate() {

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

recorder = new AudioRecord(MIC, SAMPLE, CHANNELI, FORMAT, BUFFERSIZE);

track = new AudioTrack(STREAM, SAMPLE, CHANNELO, FORMAT, BUFFERSIZE,

MODE);

buffer = new short[BUFFERSIZE];

recorder.startRecording();

track.play();

while (play) {

recorder.read(buffer, 0, buffer.length);

track.write(buffer, 0, buffer.length);

}

return START_STICKY;

}

在活动中单击“记录”按钮时,将调用此服务.我希望能够单击记录并选择单击取消以停止此循环.实现此目的的下面的监听器是:

private OnClickListener Recording = new OnClickListener() {

public void onClick(View v) {

serviceIntent = new Intent(getApplicationContext(),

AudioService.class);

serviceIntent.putExtra("extraData", "somedata");

startService(serviceIntent);

record.setEnabled(false);

cancel.setEnabled(true);

cancel.requestFocus();

};

现在问题变得明显了.应用程序在到达startService(serviceIntent)时无法完成执行,只是在余额中挂起.

那么我的追索权是什么?我正在考虑从无限循环内部控制服务的一些方法,但我对Android的经验不足让我想知道如何做到这一点.通过在循环中实例化一个新按钮来煽动某种打破方式;所以在startIntent期间,我将能够突破循环并“结束疯狂”.

任何帮助,将不胜感激.我也意识到这个服务应该从UI的一个单独的线程开始,以避免“应用程序没有响应…”问题,但这是另一个主题.我现在的主要目标是打破循环,我将不胜感激任何有关如何做到这一点的帮助或方向.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值