`
rensanning
  • 浏览: 3538488 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:37962
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:606453
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:681080
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:88693
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401228
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69549
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91411
社区版块
存档分类
最新评论

在Titanium中使用Android的Service

阅读更多
    在使用Titanium做MP3播放器的时候,对于Android平台,我们可以不用特别的考虑,使用Titanium.Media.AudioPlayer、Titanium.Media.Sound等函数即可在播放声音,当前Activity终了新的Activity生成的时候,正在播放的身音也不会被中止。

     在我们使用手机时,往往是多线程的,而且是会突然间断的。比如我们会一边浏览网页,一边听MP3,或者正在发短信的时候,突然打进来电话。这样我们必定会离开当前的用户界面。比如你会关闭MP3歌曲列表,去发短信,所以往往就需要有些程序在后台完成,暂时脱离屏幕。

    那么对于Android平台来说,是如何实现的呢?答案很简单,这时就可以用到Android中的Service!

    我们查看Titanium的例子KitchenSink可以发现,Titanium也支持Service。

引用
KitchenSink的service的例子:
android_services.js
testservice.js

tiapp.xml中设定service

<ti:app xmlns:ti="http://ti.appcelerator.org">

    <android xmlns:android="http://schemas.android.com/apk/res/android">
        <tool-api-level>7</tool-api-level>
        <manifest>
            <uses-sdk android:minSdkVersion="7"/>
        </manifest>
        <services>
            <service type="interval" url="playSoundService.js"/>
        </services>
        <activities/>
    </android>

</ti:app>


Titanium会为你自动生成以下代码:
import ti.modules.titanium.android.TiJSIntervalService;

public final class PlaySoundServiceService extends TiJSIntervalService {
	public PlaySoundServiceService() {
		super("playSoundService.js");
	}
}


并且在AndroidManifest.xml注册:
<service android:name="《tiapp_id》.PlaySoundServiceService"/>


通过以下的尝试,我们发现可以实现我们的需求。

(1)首先通过Titanium.Android.createServiceIntent() 得到Intent,然后可以利用putExtra('interval', 1000);方法设置参数,其他任何参数也可以这样设置。
var soundIntent = Ti.Android.createServiceIntent( { url:  'playSoundService.js' } );
soundIntent.putExtra('interval', 1000);


(2)把上边设置好的Intent传递给Titanium.Android.createService(),然后调用返回实例的start()方法从而启动Servie。
sound_service = Ti.Android.createService( soundIntent );
sound_service.start();


但是需要注意的是,Service在每次启动的时候都会从代码的开始执行,所以我们需要判断当前Service是否已经的状态从而作出不同的处理,在Titanium中可以通过Titanium.Android.currentService获取当前Service的实例,这样一来我们就可以判断出是否是第一启动还是Service的循环处理了。

↓ Service例( playSoundService.js )

var service = Ti.Android.currentService;
var intent = service.intent;

if( !service.initialized ){
	service.addEventListener( 'playSound' , function( e ){
		if( service.sound == undefined || service.sound.url != service.fileToPlay ){
			if( service.sound ){
				service.sound.stop();
			}
			service.sound = Ti.Media.createSound({
				url:service.fileToPlay
			});
		}
		service.sound.play();
	});
	service.addEventListener( 'pauseSound' , function( e ){
		service.sound.pause();
	});
	service.addEventListener( 'resumeSound' , function( e ){
		service.sound.play();
	});
	service.addEventListener( 'stopSound' , function( e ){
		service.sound.stop();
	});

	service.initialized = true;
}

给Service赋予了sound相关的处理,在Activity中也可以使用。

在Activity中,判断你想要启动的Service是否已经启动了,可以使用Titanium.Android.isServiceRunning,如果没有启动的话,把它启动起来!

↓ JavaScript(Activity)代码:

var sound_service;
var soundIntent = Ti.Android.createServiceIntent( { url:  'playSoundService.js' } );

if( Ti.Android.isServiceRunning( soundIntent ) == false ){
	Ti.API.info( 'service is not Running' );
	soundIntent.putExtra('interval', 1000);
	sound_service = Ti.Android.createService( soundIntent );
	sound_service.addEventListener('resume', function(e) {
		if( e.source.sound ){
			Ti.API.info( 'sound.getTime() ' + e.source.sound.getTime() );
		}
	});
	sound_service.addEventListener('pause', function(e) {
	});
	sound_service.addEventListener('stop', function(e) {
		Ti.API.info('Service is stopped');
	});

	sound_service.start();
}else{
	Ti.API.info( 'service is Running' );
	sound_service = Ti.Android.currentService;
}

这样一来,Service和Activity就能偶衔接起来。给Service实例设置好参数后,通过fireEvent 方法来调用事件。

例如上边的代码,如果想播放声音的话,就需要在JavaScript(Activity)中:

sound_service.fileToPlay = 'music.mp3';
sound_service.fireEvent( 'startSound' );


这样就会在Service中播放声音了!!!

===========================================================
===========================================================
需要注意的几个地方:

a) Ti.Android.currentService返回的实例一定是我们自己预想的Service吗?
???

b) Service什么时候停止比较合适?
???

c) 播放音乐的话,一般都不是定期处理,所以是否应该采用interval以外的方法?
???
0
0
分享到:
评论

相关推荐

    SmsReceiver:适用于Titanium的Android SMS接收器

    适用于Titanium的Android SMS接收器 BroadcastReceiver,用于在接收到SMS时在Titanium中运行JavaScript服务描述即使您的应用未运行,该模块也可以让您检测传入的SMS消息。 您可以在Titanium中创建一个JavaScript服务...

    titanium-firebase-demo:一个跨平台的示例应用程序,演示如何在Appcelerator Titanium中使用Titanium Firebase模块

    钛火力基地演示一个跨平台的示例应用程序,演示了如何在Appcelerator Titanium中使用模块。要求iOS :从您的项目中下载GoogleConfig-Info.plist并将其复制到Resources (经典)或app/assets/iphone (Alloy) ...

    android静默安装程序

    这通常涉及到`pm`(Package Manager Service)命令行工具或者使用Adb(Android Debug Bridge)工具来实现。 **获取root权限:** 1. **使用Root工具**:市面上有许多第三方工具如SuperSU、Magisk等可以帮助用户获取...

    钛备份 Titanium Backup v3.8.6 捐赠版 for android -- 安卓 天涯浪子

    * 按名称/类型/状态/程序标签过滤程序(在批量操作中同样有效) * 备份/恢复常规程序和设置 * 备份/恢复受保护程序和设置 * 备份/恢复系统设置(包括Wi-Fi接入点列表) * 恢复程序时同时恢复电子市场链接 * 零单击...

    Titan-firebase-cloud-messaging:在Axway Titanium中使用Firebase Cloud Messaging SDK:rocket:编辑

    Firebase云消息传递-钛金模块使用Axway Titanium中的本机Firebase SDK(iOS / Android)。 该存储库是项目的一部分。支持这项工作@hansemannn的整个Firebase支持由社区( @hansemannn和@m1ga )开发和维护。 为了...

    ti-wifidirect:Wi-Fi 点对点 Android 演示代码转换为 Titanium 模块*正在进行中*

    5. **在Titanium应用中使用模块**:将编译后的模块添加到项目中,然后在JavaScript中导入并调用模块方法。 在"ti-wifidirect"项目中,开发者正致力于将上述概念转化为实际的Titanium模块,以便让 Titanium 应用...

    Building Cross-Platform Apps

    在给定的文件信息中,提到了三个主要技术:Titanium Mobile、iOS和Android。现在让我们详细探讨如何利用这些技术构建跨平台应用。 首先,让我们来了解Titanium Mobile。Titanium Mobile是一个由Appcelerator公司...

    service_example:example_service_p4a

    这段代码旨在演示python-for-android中服务的使用以及服务与kivy前端之间的通信。 该示例出于简单和历史原因而使用OSC协议(因为从历史上讲,实现是随同Kivy一起交付的,现在可以作为第三方使用更好的实现)。 OSC...

    android:所有Android的东西

    在Android应用结构中,四大组件是Activity、Service、BroadcastReceiver和ContentProvider。Activity是用户界面的入口,负责显示UI并与用户交互。Service则在后台运行,执行长时间运行的任务,不与用户界面直接交互...

    LearnHut_android:LearnHut 安卓应用

    从描述中的“学习小屋 Android 应用程序”可以看出,这个项目是为Android操作系统定制的,旨在帮助用户在移动设备上进行各种学习活动。 在Android应用开发中,Java是最常用的语言之一,因为它是Android SDK的官方...

    Projet_final_android:最终项目android课程

    在本项目"Projet_final_android:最终项目android课程"中,开发者主要展示了在ESEO培训期间学习Android开发的成果。这个项目是基于Kotlin语言构建的,Kotlin是Google推荐的用于Android应用开发的现代、类型安全的编程...

    Daboyeo-Android

    - **空安全**:Kotlin有严格的空值检查,Optional概念被内置在类型系统中,避免了常见的NullPointerException。 2. **Android架构组件**: - **ViewModel**:用于存储和管理UI相关的数据,在配置变更时保持存活,...

    手机资料:刷机,修改及提取工具

    此外,像取证软件DDMS(Dalvik Debug Monitor Service)可以帮助开发者调试应用,而钛备份(Titanium Backup)则可备份应用数据和设置。对于MTK设备,可能还会使用到特定的提取工具,如MTK SP Tool,它能读取设备的...

    download-aws-s3:实施下载Amazon Web Service(AWS)的解决方案-S3

    在IT行业中,Amazon Web Services(AWS)是全球领先的云服务提供商,其S3(Simple Storage Service)服务是存储和检索数据的核心组件。"download-aws-s3" 是一个专为从AWS S3下载文件而设计的解决方案。在这个项目中...

    cordova_purple_robot_intent:向紫色机器人发送意向

    Intent在Android系统中是一种强大的机制,用于启动或激活服务、活动以及其他组件。在这里,Intent被用来向一个红外线(IR)机器人发送命令,这意味着这个Cordova插件或应用可能具有控制智能家居设备的能力,比如电视...

    MobileDispatch

    12. **版本控制**:在开发过程中,版本控制工具如Git被广泛使用,它帮助团队协作,管理代码变更,并方便回滚到之前的版本。 13. **部署与发布**:完成开发后,应用会被打包并通过App Store或Google Play Store进行...

    ZAQPULL:zaq协议的服务端实现

    在本文中,我们将深入探讨ZAQPULL的核心概念、设计原则以及如何在Java环境中实现服务端。 1. **核心概念** - **Zaq协议**: Zaq协议是ZAQPULL的基础,它定义了服务器与客户端之间的通信规范,包括数据格式、握手...

Global site tag (gtag.js) - Google Analytics