`

android 简单服务实现

阅读更多

/**
* 测试服务
*
* @time 下午02:40:27
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class SercviceDemoActivity extends Activity implements OnClickListener {
private static final String MY_S_EVENT = "cn.yue.servicedemo.MyService.MY_S_SEVENT";
Button btn_start, btn_stop, btn_exit;
TextView txv_info;
private IBinder binder = null;
private BroadcastReceiver broadcastReceiver = new MyIntentReceiver();
private final IntentFilter filter = new IntentFilter(MY_S_EVENT);


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findView();
// 注册广播
registerReceiver(broadcastReceiver, filter);


// 绑定服务
bindService(new Intent("cn.yue.servicedemo.REMOTE_SERVICE"), connection, Context.BIND_AUTO_CREATE);
}


private ServiceConnection connection = new ServiceConnection() {


@Override
public void onServiceDisconnected(ComponentName name) {


}


@Override
public void onServiceConnected(ComponentName name, IBinder iBinder) {
binder = iBinder;
}
};


/**
* 实例化控件
*/
private void findView() {
btn_start = (Button) this.findViewById(R.id.btn_play);
btn_start.setOnClickListener(this);
btn_stop = (Button) this.findViewById(R.id.btn_stop);
btn_stop.setOnClickListener(this);
btn_exit = (Button) this.findViewById(R.id.btn_exit);
btn_exit.setOnClickListener(this);
txv_info = (TextView) this.findViewById(R.id.txv_info);
txv_info.setText("ready");
}


@Override
public void onClick(View v) {
Log.i("tag", "onClick");
if (v == btn_start) {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
try {
binder.transact(1, data, reply, 0);
} catch (RemoteException e) {
e.printStackTrace();
}
} else if (v == btn_stop) {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
try {
binder.transact(2, data, reply, 0);
} catch (RemoteException e) {
e.printStackTrace();
}
} else if (v == btn_exit) {
finish();
}


}


/**
* 自定义广播接收
*/
class MyIntentReceiver extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {
int bNum = intent.getIntExtra("key", -1);
if (bNum == 0) {
txv_info.setText("Playing");
} else {
txv_info.setText("stop");
}
}


}

}

 

 

/**
* 简单播放控制服务
*
* @time 下午02:43:29
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class MyService extends Service implements Runnable {
private IBinder myBinder = null;
private Thread myThread;
public static Handler myHandler;
private MediaPlayer myPlayer;
private final String MY_S_SEVENT = "cn.yue.servicedemo.MyService.MY_S_SEVENT";
private Context myContext;


@Override
public IBinder onBind(Intent intent) {
return myBinder;
}


@Override
public void onCreate() {
super.onCreate();
myContext = this;
myBinder = new MyBinder();
// 启动线程接收控制信息
myThread = new Thread(this);
myThread.start();


}


@Override
public void run() {
Looper.prepare();
myHandler = new EventHandle(Looper.myLooper());
Looper.loop();
}


/**
*
*/
class EventHandle extends Handler {


public EventHandle(Looper looper) {
super(looper);
}


@Override
public void handleMessage(Message msg) {
// 取得 message信息
String tmpStr = (String) msg.obj;
if (tmpStr.contains("play")) {
if (null != myPlayer) {
return;
}
Intent intent = new Intent(MY_S_SEVENT);
intent.putExtra("key", 0);
myContext.sendBroadcast(intent);
myPlayer = MediaPlayer.create(myContext, R.raw.geek_in_the_pink);
myPlayer.start();
} else if (tmpStr.contains("stop")) {
if (null != myPlayer) {

Intent intent = new Intent(MY_S_SEVENT);
intent.putExtra("key", 1);
myContext.sendBroadcast(intent);
myPlayer.stop();
myPlayer.release();
myPlayer = null;
}
}


}
}


}


/**
* 自定义binder对像
*
* @time 下午02:55:23
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class MyBinder extends Binder {


@Override
protected boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {
switch (code) {
case 1:
// 向子线程中发送控制信息
String obj = "play";
Message message = MyService.myHandler.obtainMessage(1, 1, 1, obj);
MyService.myHandler.sendMessage(message);
break;
case 2:
// 向子线程中发送控制信息
String obj1 = "stop";
Message message1 = MyService.myHandler.obtainMessage(1, 1, 1, obj1);
MyService.myHandler.sendMessage(message1);
break;
}


return true;
}


}

 

 

 

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.yue.servicedemo"
android:versionCode="1"
android:versionName="1.0" >


<uses-sdk android:minSdkVersion="10" />


<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".SercviceDemoActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />


<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 注册播放控制信息android:process 指定进程名程 -->
<service
android:name=".MyService"
android:process=":remote" >
<intent-filter >
<action android:name="cn.yue.servicedemo.REMOTE_SERVICE" />
</intent-filter>
</service>
</application>


</manifest>

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >


<Button
android:id="@+id/btn_play"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Play" />


<Button
android:id="@+id/btn_stop"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Stop" />


<Button
android:id="@+id/btn_exit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Exit" />


<TextView
android:id="@+id/txv_info"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="info" />


</LinearLayout>

 

 

 

 

 

 

分享到:
评论

相关推荐

    android简易计算器实现

    在这个项目中,“android简易计算器实现”主要涉及以下几个关键知识点: 1. **Android Studio IDE**:Android Studio是Google提供的一款集成开发环境,用于构建Android应用程序。它包含了代码编辑器、调试工具、...

    android视频资讯客户端简单实现--android客户端与web服务器实现

    本项目实现了一个简单的交互过程,即Android客户端通过HTTP请求与Web服务器进行通信,服务器响应XML格式的数据,客户端解析后在ListView中展示。下面将详细探讨这些关键知识点。 1. **网络通信**: - Android中的...

    Android简易版聊天室

    在本文中,我们将深入探讨如何构建一个简单的Android聊天室应用,以及它与PC服务器端和客户端的交互。这个"Android简易版聊天室"项目旨在提供一个基础架构,用于理解多平台间实时通信的工作原理。 首先,我们要理解...

    android实现简单的拨号功能

    在Android平台上,实现一个简单的拨号功能涉及到对系统电话API的使用,这主要涉及到`Intent`、`tel:`协议以及权限管理。以下是对这个话题的详细解析: 首先,Android应用程序不能直接操作硬件,而是通过发送意图...

    Android 简单代码实现的Android 计算器源码.zip

    本项目“Android简单代码实现的Android计算器源码”提供了一个实现这一功能的示例,它使用Java编程语言编写,并且包含了一个完整的Android应用项目结构。 首先,这个源码项目会展示如何设计一个用户友好的界面。在...

    Android Studio实现简单的购物商城界面源码

    在Android应用开发中,创建一个简单的购物商城界面是常见的需求,尤其对于初学者而言,这是一个很好的实践项目。本文将详细讲解如何使用Android Studio和ListView组件来实现这样的界面。首先,我们要理解ListView的...

    android欢迎界面简单实现

    本文将详细讲解如何实现一个简单的Android欢迎界面,以增强应用程序的用户体验。 首先,我们需要理解Android欢迎界面的基本概念。它通常是一个在应用程序主界面加载前展示的短暂页面,可以包含品牌标识、动画效果...

    Android之Android studio实现智能聊天

    图灵机器人是一个提供自然语言处理服务的平台,它可以理解和生成人类语言,为开发者提供了一个简单的方法来构建聊天机器人。开发者需要注册并获取API Key,然后在Android应用中集成这个API,以实现与机器人的通信。 ...

    android简单的画图板实现代码

    这个"android简单的画图板实现代码"就是一个适合初学者的示例项目,旨在帮助开发者了解如何在Android环境中实现画图功能。我们将深入探讨这个项目中的关键知识点。 首先,我们需要了解Android图形绘制的基础。在...

    Android实现简单音乐播放器(MediaPlayer)

    Android实现简单音乐播放器(MediaPlayer),供大家参考,具体内容如下 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要求功能有: 播放、暂停功能; 进度条显示...

    android 简易音乐播放器的实现

    文件主要包含了个人简历及多个项目的介绍,而题目要求针对“android简易音乐播放器的实现”这一主题进行知识点的生成。因此,接下来将围绕“android简易音乐播放器的实现”展开详细讨论。 ### Android简易音乐...

    在Android中用textview实现简单的小说分页

    本文将深入探讨如何使用TextView在Android环境中实现这一功能,同时考虑到字体大小的调整以及字符串处理的灵活性。 首先,TextView是Android SDK中一个核心组件,它用于显示单行或多行文本。在我们的场景中,...

    android通讯录简单实现

    在Android平台上,实现一个简单的通讯录功能涉及到多个关键知识点,主要涵盖了SQLite数据库的使用、ContentProvider、意图(Intent)以及UI设计。以下是对这些知识点的详细解释: 1. **SQLite数据库**:SQLite是...

    Android实现简易点菜功能

    在Android平台上实现简易点菜功能是一项常见的任务,尤其对于开发餐饮类应用来说至关重要。这个功能的设计和实现涉及到了用户界面(UI)、事件处理、数据管理等多个方面。下面将详细讲解如何构建这样一个系统。 ...

    android studio实现简单考试应用程序实例代码详解

    "Android Studio实现简单考试应用程序实例代码详解" Android Studio是Google推出的一个集成开发环境(IDE),它提供了一个功能强大且灵活的开发环境,用于开发Android应用程序。在本文中,我们将介绍如何使用...

    android缓存的简单实现

    3. **Android简单缓存实现** - **LruCache**: Android SDK提供的一种基于最近最少使用原则(LRU)的内存缓存实现。当内存空间不足时,会自动移除最近最少使用的数据。 - **DiskLruCache**: 一种磁盘缓存实现,同样...

    Android studio 简易计算器实现

    虽然在这个简单的计算器应用中可能不涉及其他组件,但Android Studio提供了丰富的组件库,如意图(Intent)用于在活动之间传递数据,服务(Service)在后台运行任务,广播接收器(BroadcastReceiver)监听系统事件...

    Android实现简单的答题系统

    本文实例为大家分享了Android实现答题系统的具体代码,供大家参考,具体内容如下 Question: package com.example.lenovo.exam; /** * Created by lenovo on 2017/12/4. */ //保存从数据库中读取的记录 public ...

    Android直播实现(一)Android端推流、播放

    使用Android自带的编码工具,可实现硬编码,这里有一个国内大神开源的封装很完善的的库yasea,第一种方法需要实现的Camera采集部分也一起封装好了,进行一些简单配置就可以实现编码推流,并且yasea目前已经直接支持...

    android应用锁的实现

    在本资源"android应用锁的实现"中,我们可能找到一个简单实现这一功能的示例代码。以下是关于Android应用锁实现的一些关键知识点: 1. **权限管理**:在Android系统中,为了实现应用锁,首先需要获取相应的权限。...

Global site tag (gtag.js) - Google Analytics