android-BroadcastReceiver 呼叫服务只循环一次

问题描述

BroadcastReceiver 呼叫服务只循环一次

下面是我的 tts 服务代码:

public class SMSTTSService extends Service implements TextToSpeech.OnInitListener, OnUtteranceCompletedListener {
private TextToSpeech tts;
private String spokenText;
@Override
public void onCreate() {
    tts = new TextToSpeech(this, this);
}
@Override
public void onInit(int status) {
    if (status == TextToSpeech.SUCCESS) {
        int result = tts.setLanguage(Locale.ENGLISH);
        // tts.setPitch(5); // set pitch level
        // tts.setSpeechRate(2); // set speech speed rate
        if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
            Log.e("TTS", "Language is not supported");
        } else {
            speakOut(spokenText);
        }

        /*if (result != TextToSpeech.LANG_MISSING_DATA && result != TextToSpeech.LANG_NOT_SUPPORTED) {
            tts.speak(c, TextToSpeech.QUEUE_FLUSH, null);
        }*/
    } else {
        Log.e("TTS", "Initilization Failed");
    }
}
private void speakOut(String text) {
    tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
@Override
public void onUtteranceCompleted(String uttId) {
    stopSelf();
}
@Override
public void onDestroy() {
    if (tts != null) {
        tts.stop();
        tts.shutdown();
    }
    super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
    return null;
}
@Override
public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
    spokenText = intent.getStringExtra("spoken_txt");
}
}

从接收器中调用服务器:

public class Receiver extends BroadcastReceiver {
    private static final String TAG = "SMSReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {
for(int i=0; i<msgs.length; i++) {
....
 Intent intentTTS = new Intent(context, SMSTTSService.class);
                        intentTTS.putExtra("spoken_txt", msgBody);
                        context.startService(intentTTS);
}

但是在循环语句中服务器只执行一次。这是哪的问题?如何避免?

解决方案

先检查下msgs.length长度
长度没问题,改成这样行不行
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);

spokenText = intent.getStringExtra("spoken_txt");

//do your method
speakOut(spokenText);
}

时间: 2024-08-20 19:14:44

android-BroadcastReceiver 呼叫服务只循环一次的相关文章

如何检查电话呼叫服务是否在 android 设置中启动?

问题描述 如何检查电话呼叫服务是否在 android 设置中启动? 我想知道如何检查电话呼叫服务是否在 android 中不同设置中启动.我检查的设备是 Micromax Funbook(p300) Tablet(Android 4.0.3),这里没有呼叫服务,我用的下面的代码检查: TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); if (tm.getPhoneType()

短信拦截-android BroadcastReceiver中拦截短信后如何给回调activity

问题描述 android BroadcastReceiver中拦截短信后如何给回调activity (4.3之前的)应该是调用接口,但具体的回调接口不清楚,也不清楚如何自动刷新 解决方案 Android-拦截短信(BroadcastReceiver)Android手机短信拦截---BroadcastReceiver(一) 解决方案二: // 注册接收.监听短信receiver smsReceiver = new SMSReceiver(); IntentFilter receiverFilter

Android客户端与服务端交互_Android

本文和大家一起了解了一下android客户端与服务端是怎样交互的,具体内容如下 1.后台使用简单的servlet,支持GET或POST.这个servlet最终返回给前台一个字符串flag,值是true或false,表示登录是否成功. servlet使用之前需要配置,主义servlet的servlet-name要和servlet-mapping的servlet-name一致,否则找不到路径 我是在myEclipse上创建的一个web service 项目,然后部署到tomcat服务器上以便andr

【硅谷连线】Line将推出一种基于数据的新呼叫服务

中云网每天连线硅谷,呈现最新鲜资讯!这里的"硅谷"指的是国外具有典型性和创新性企业代表. 1.Line能打电话了 廉价呼叫服务挑战Skype <http://tech.qq.com/a/20140226/020243.htm> Line对用户吸引力最大的即"聊天表情贴图".但Line不断表示它的好处不止于此. Line公司周二表示,它将在下个月推出一种基于数据的新呼叫服务,试图挑战固定电话运营商和移动运营商的语音通话定价权. Line公司计划今年三月在日

Line能打电话了 将推出数据新呼叫服务

1.Line能打电话了 廉价呼叫服务挑战Skype <http://tech.qq.com/a/20140226/020243.htm> Line对用户吸引力最大的即"聊天表情贴图".但Line不断表示它的好处不止于此. Line公司周二表示,它将在下个月推出一种基于数据的新呼叫服务,试图挑战固定电话运营商和移动运营商的语音通话定价权. Line公司计划今年三月在日本,美国,墨西哥,西班牙,泰国和菲律宾正式推出这种呼叫服务.该服务将采取现买现付和30天付费两种方案. 2.购

Android 使用ViewPager实现左右循环滑动及轮播效果

ViewPager是一个常用的Android组件,不过通常我们使用ViewPager的时候不能实现左右无限循环滑动,在滑到边界的时候会看到一个不能翻页的动画,可能影响用户体验.此外,某些区域性的ViewPager(例如展示广告或者公告之类的ViewPager),可能需要自动轮播的效果,即用户在不用滑动的情况下就能够看到其他页面的信息. 循环滑动效果的实现:PagerAdapter 我们知道ViewPager自带的滑动效果非常出色,因此我们基本不需要处理这个滑动,只处理内容的显示.而内容的显示是由

Android客户端与服务端交互

本文和大家一起了解了一下android客户端与服务端是怎样交互的,具体内容如下 1.后台使用简单的servlet,支持GET或POST.这个servlet最终返回给前台一个字符串flag,值是true或false,表示登录是否成功. servlet使用之前需要配置,主义servlet的servlet-name要和servlet-mapping的servlet-name一致,否则找不到路径 我是在myEclipse上创建的一个web service 项目,然后部署到tomcat服务器上以便andr

Android推送服务:百度云推送

一.推送服务简介 消息推送,顾名思义,是由一方主动发起,而另一方与发起方以某一种方式建立连接并接收消息.在Android开发中,这里的发起方我们把它叫做推送服务器(Push Server),接收方叫做客户端(Client).相比通过轮询来获取新消息或通知,推送无论是在对客户端的资源消耗还是设备耗电量来说都比轮询要好,所以,目前绝大多数需要及时消息推送的App都采用Push的方式来进行消息通知. Android生态系统原本提供了类似于Apple iOS推送服务APNS的GCM(Google Clo

android-请问在Android开发中如何只获得手机桌面上的App列表

问题描述 请问在Android开发中如何只获得手机桌面上的App列表 我现在能够获得手机中安装的所有App列表,但我只想获得手机桌面上的App列表,请问应该如何解决? 解决方案 第一步:建立基本数据:PakageMod.java public class PakageMod { public String pakageName;//应用的包名 public String appName;//应用的名称 public Drawable icon;//应用图标 public PakageMod()