- 浏览: 263026 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (303)
- c (31)
- c++ (16)
- java (18)
- c# (1)
- python (3)
- java web (6)
- oracle (7)
- sqlserver (2)
- mysql (2)
- android (24)
- android系统 (15)
- android多媒体部分 (15)
- android游戏 (12)
- linux (26)
- javaScript (1)
- ajax (1)
- node JS (2)
- html (5)
- apache (3)
- jboss (1)
- weblogic (0)
- 通信协议 (10)
- 云计算 (1)
- 分布式 (5)
- ejb (1)
- webservice (5)
- 设计模式 (16)
- JNI (6)
- swing (13)
- 版本控制 (1)
- UML (1)
- xml (4)
- spring (5)
- hibernate (5)
- struts1 (3)
- struts2 (4)
- ibatis (0)
- tomcat (2)
- 心得体会 (1)
- css (1)
- 嵌入式 (41)
- arm体系结构 (10)
/**
* 测试服务
*
* @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>
发表评论
-
NDK环境搭建学习笔记
2013-05-12 13:39 1109本地native方法实现步骤 ... -
即时通信学习笔记
2013-05-18 09:56 805下载安装文件 openfire_3_6_4.exe spark ... -
android 代码混淆
2013-03-20 19:47 1055在项目文件下,自动生成了文件:proguard-projec ... -
android 即时通信学习笔记一
2012-11-04 15:49 830下载安装文件 openfire_3_6_4.exe spa ... -
andriod 源码下载
2012-11-02 14:36 885git 是版本控制工具 安装方法: sudo apt-g ... -
android应用的适配常用方法
2012-09-03 14:48 413屏幕大小: small normal large ... -
android 蓝牙学习笔记
2012-09-07 09:56 928蓝牙部分学习 蓝牙之间的通信需要四部分: 1 设置蓝牙设备 ... -
取得手机 IP地址
2012-09-07 09:57 634public String getLocalIpAddress ... -
android动画Scale+Translate
2012-09-07 10:14 753/** * 移动缩小动画 * @author 岳振华 * ... -
android中ActionBar +Fragment
2012-09-07 10:18 1111/** * 测试tab标题栏 * * @time 下午0 ... -
android ArcGIS学习笔记一
2012-09-08 18:18 3480动态操作地图服务 1.动态添加一个地图服务String ur ... -
android 启动流程
2012-09-10 15:45 707bootload 加载linux 内核 挂载ramd ... -
android 修改开机动画
2012-09-10 16:41 944framebuffer驱动里可以定制开机界面 开机过程中屏 ... -
Framebuffer Driver
2012-09-10 16:42 703Framebuffer Driver 中 ... -
android 常用命令
2012-09-26 16:03 7001 显示设备列表 adb devices 2 在指定模拟器 ... -
android 调用webservice
2012-10-13 22:43 914web服务端 package cn.yue.lsp.ph ... -
android handler和looper
2012-10-25 16:58 7061 消息在主线程执行 handler = new Handl ... -
android 动画
2012-10-25 17:05 676tween xml 代码如下: <?xm ... -
NDK学习笔记
2012-10-27 15:40 707工具下载: cygwin 1.7或以上版本 awk升级 ... -
android activity四种加载模式
2012-10-27 15:45 845Activity之间的跳转,或 ...
相关推荐
在这个项目中,“android简易计算器实现”主要涉及以下几个关键知识点: 1. **Android Studio IDE**:Android Studio是Google提供的一款集成开发环境,用于构建Android应用程序。它包含了代码编辑器、调试工具、...
本项目实现了一个简单的交互过程,即Android客户端通过HTTP请求与Web服务器进行通信,服务器响应XML格式的数据,客户端解析后在ListView中展示。下面将详细探讨这些关键知识点。 1. **网络通信**: - Android中的...
在本文中,我们将深入探讨如何构建一个简单的Android聊天室应用,以及它与PC服务器端和客户端的交互。这个"Android简易版聊天室"项目旨在提供一个基础架构,用于理解多平台间实时通信的工作原理。 首先,我们要理解...
在Android平台上,实现一个简单的拨号功能涉及到对系统电话API的使用,这主要涉及到`Intent`、`tel:`协议以及权限管理。以下是对这个话题的详细解析: 首先,Android应用程序不能直接操作硬件,而是通过发送意图...
本项目“Android简单代码实现的Android计算器源码”提供了一个实现这一功能的示例,它使用Java编程语言编写,并且包含了一个完整的Android应用项目结构。 首先,这个源码项目会展示如何设计一个用户友好的界面。在...
zeromq Android简单实现 ZeroMQ,又称为0MQ,是一个高性能、轻量级的消息队列库,它为分布式计算提供了灵活高效的通信机制。在Java环境中,我们可以利用ZeroMQ进行跨平台的消息传递,并且在Android平台上也有应用。...
本文将详细讲解如何实现一个简单的Android欢迎界面,以增强应用程序的用户体验。 首先,我们需要理解Android欢迎界面的基本概念。它通常是一个在应用程序主界面加载前展示的短暂页面,可以包含品牌标识、动画效果...
图灵机器人是一个提供自然语言处理服务的平台,它可以理解和生成人类语言,为开发者提供了一个简单的方法来构建聊天机器人。开发者需要注册并获取API Key,然后在Android应用中集成这个API,以实现与机器人的通信。 ...
在Android应用开发中,创建一个简单的购物商城界面是常见的需求,尤其对于初学者而言,这是一个很好的实践项目。本文将详细讲解如何使用Android Studio和ListView组件来实现这样的界面。首先,我们要理解ListView的...
这个"android简单的画图板实现代码"就是一个适合初学者的示例项目,旨在帮助开发者了解如何在Android环境中实现画图功能。我们将深入探讨这个项目中的关键知识点。 首先,我们需要了解Android图形绘制的基础。在...
Android实现简单音乐播放器(MediaPlayer),供大家参考,具体内容如下 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要求功能有: 播放、暂停功能; 进度条显示...
文件主要包含了个人简历及多个项目的介绍,而题目要求针对“android简易音乐播放器的实现”这一主题进行知识点的生成。因此,接下来将围绕“android简易音乐播放器的实现”展开详细讨论。 ### Android简易音乐...
在Android平台上,实现一个简单的通讯录功能涉及到多个关键知识点,主要涵盖了SQLite数据库的使用、ContentProvider、意图(Intent)以及UI设计。以下是对这些知识点的详细解释: 1. **SQLite数据库**:SQLite是...
在Android平台上实现简易点菜功能是一项常见的任务,尤其对于开发餐饮类应用来说至关重要。这个功能的设计和实现涉及到了用户界面(UI)、事件处理、数据管理等多个方面。下面将详细讲解如何构建这样一个系统。 ...
"Android Studio实现简单考试应用程序实例代码详解" Android Studio是Google推出的一个集成开发环境(IDE),它提供了一个功能强大且灵活的开发环境,用于开发Android应用程序。在本文中,我们将介绍如何使用...
虽然在这个简单的计算器应用中可能不涉及其他组件,但Android Studio提供了丰富的组件库,如意图(Intent)用于在活动之间传递数据,服务(Service)在后台运行任务,广播接收器(BroadcastReceiver)监听系统事件...
这通常通过发送M-SEARCH SSDP(简单服务发现协议)请求实现。你可以使用如`libupnp`这样的开源库,它提供了一个叫做`IGDDeviceFinder`的类,用于查找网络中的UPnP设备。 2. **设备选择**: 发现设备后,你需要选择...
本文实例为大家分享了Android实现答题系统的具体代码,供大家参考,具体内容如下 Question: package com.example.lenovo.exam; /** * Created by lenovo on 2017/12/4. */ //保存从数据库中读取的记录 public ...
使用Android自带的编码工具,可实现硬编码,这里有一个国内大神开源的封装很完善的的库yasea,第一种方法需要实现的Camera采集部分也一起封装好了,进行一些简单配置就可以实现编码推流,并且yasea目前已经直接支持...
在本资源"android应用锁的实现"中,我们可能找到一个简单实现这一功能的示例代码。以下是关于Android应用锁实现的一些关键知识点: 1. **权限管理**:在Android系统中,为了实现应用锁,首先需要获取相应的权限。...