- 浏览: 249869 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (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 1075本地native方法实现步骤 ... -
即时通信学习笔记
2013-05-18 09:56 783下载安装文件 openfire_3_6_4.exe spark ... -
android 代码混淆
2013-03-20 19:47 1006在项目文件下,自动生成了文件:proguard-projec ... -
android 即时通信学习笔记一
2012-11-04 15:49 757下载安装文件 openfire_3_6_4.exe spa ... -
andriod 源码下载
2012-11-02 14:36 825git 是版本控制工具 安装方法: sudo apt-g ... -
android应用的适配常用方法
2012-09-03 14:48 385屏幕大小: small normal large ... -
android 蓝牙学习笔记
2012-09-07 09:56 809蓝牙部分学习 蓝牙之间的通信需要四部分: 1 设置蓝牙设备 ... -
取得手机 IP地址
2012-09-07 09:57 605public String getLocalIpAddress ... -
android动画Scale+Translate
2012-09-07 10:14 703/** * 移动缩小动画 * @author 岳振华 * ... -
android中ActionBar +Fragment
2012-09-07 10:18 1054/** * 测试tab标题栏 * * @time 下午0 ... -
android ArcGIS学习笔记一
2012-09-08 18:18 3415动态操作地图服务 1.动态添加一个地图服务String ur ... -
android 启动流程
2012-09-10 15:45 641bootload 加载linux 内核 挂载ramd ... -
android 修改开机动画
2012-09-10 16:41 862framebuffer驱动里可以定制开机界面 开机过程中屏 ... -
Framebuffer Driver
2012-09-10 16:42 644Framebuffer Driver 中 ... -
android 常用命令
2012-09-26 16:03 6661 显示设备列表 adb devices 2 在指定模拟器 ... -
android 调用webservice
2012-10-13 22:43 860web服务端 package cn.yue.lsp.ph ... -
android handler和looper
2012-10-25 16:58 6691 消息在主线程执行 handler = new Handl ... -
android 动画
2012-10-25 17:05 633tween xml 代码如下: <?xm ... -
NDK学习笔记
2012-10-27 15:40 671工具下载: cygwin 1.7或以上版本 awk升级 ... -
android activity四种加载模式
2012-10-27 15:45 767Activity之间的跳转,或 ...
相关推荐
android简易计算器实现 使用全局变量存储计算结果
Android ContentProvider简单实现
android视频资讯客户端简单实现--android客户端与web服务器实现 android客户端想web服务器请求,服务器返回xml文件。android客户端解析之。显示在listView中
一个简单的android欢迎界面实现,用于在程序启动时添加欢迎动画,使得程序更炫。简单而使用。
android仿简单的实现emoji表情功能,可以发送出表情用Textview列表来显示出来。代码简单,拷贝就可以使用
Android中socket通信简单实现 socket通信需要有一个服务器和客户端,可以把同一个APP作为服务器跟客户端,也可以分开成两个APP。 先上个图: 这里以一个APP作为服务器跟客户端为示例 1、添加网络访问权限 2、写...
Android之Service实现比较大小
在Android中用textview实现简单的小说分页,字体可调节,未对字符串进行任何操作,分段和控制格式自行对字符串操作
通过Android的Listview实现的简单的购物商城界面,可以上下滑动查看列表内容,具体演示效果和开发环境参考我主页的这篇同名博客,源码有注释
这是一个实现android手机拨号功能的程序,已经通过测试了代码没有问题。
在Android中简单实现物流详情页
本文实例为大家分享了Android实现答题系统的具体代码,供大家参考,具体内容如下 Question: package com.example.lenovo.exam; /** * Created by lenovo on 2017/12/4. */ //保存从数据库中读取的记录 public ...
闹钟的简单实现,只有显示时间和设置闹钟。 AlarmView package com.example.lenovo.clock2; import android.app.AlarmManager; import android.app.PendingIntent; import android.app.TimePickerDialog; import ...
Android-RecyclerView基础写法简单实现,集成过程请见CSDN博客介绍https://blog.csdn.net/weimeig/article/details/80244059
android 简易音乐播放器的实现 附说明和全部代码
一个简单的android camera的实现
Android 简单快速 实现 下雨
Android 简单代码实现的Android 计算器源码.zip
使用Android自带的编码工具,可实现硬编码,这里有一个国内大神开源的封装很完善的的库yasea,第一种方法需要实现的Camera采集部分也一起封装好了,进行一些简单配置就可以实现编码推流,并且yasea目前已经直接支持...
基于Broadcast,BroadcastReceiver等与广播相关的知识实现简单的音乐播放功能,包括音乐的播放、暂停、切换、进度选择、音量调整。 设计效果 (进度条时间刷新功能还没有实现) 实现思路 音乐服务端负责播放音乐...