当前位置: 首页 > news >正文

浦东新区手机网站设计石家庄网站推广方案

浦东新区手机网站设计,石家庄网站推广方案,长沙企业网站建设较好的公司,如东建设网站2019独角兽企业重金招聘Python工程师标准 Android Service是分为两种#xff1a; 本地服务#xff08;Local Service#xff09;#xff1a; 同一个apk内被调用 远程服务#xff08;Remote Service#xff09;#xff1a;被另一个apk调用 远程服务需要借… 2019独角兽企业重金招聘Python工程师标准 Android Service是分为两种 本地服务Local Service 同一个apk内被调用 远程服务Remote Service被另一个apk调用 远程服务需要借助AIDL来完成。 AIDL 是什么 AIDL (Android Interface Definition Language) 是一种IDL 语言用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, IPC)的代码。如果在一个进程中例如Activity要调用另一个进程中例如Service对象的操作就可以使用AIDL生成可序列化的参数。 AIDL IPC机制是面向接口的像COM或Corba一样但是更加轻量级。它是使用代理类在客户端和实现端传递数据。 AIDL 的作用 由于每个应用程序都运行在自己的进程空间并且可以从应用程序UI运行另一个服务进程而且经常会在不同的进程间传递对象。在Android平台一个进程通常不能访问另一个进程的内存空间所以要想对话需要将对象分解成操作系统可以理解的基本单元并且有序的通过进程边界。   通过代码来实现这个数据传输过程是冗长乏味的Android提供了AIDL工具来处理这项工作。 选择AIDL的使用场合 官方文档特别提醒我们何时使用AIDL是必要的只有你允许客户端从不同的应用程序为了进程间的通信而去访问你的service以及想在你的service处理多线程。 如果不需要进行不同应用程序间的并发通信(IPC)you should create your interface by implementing a Binder或者你想进行IPC但不需要处理多线程的则implement your interface using a Messenger。无论如何在使用AIDL前必须要理解如何绑定service——bindService。 下面用一个客户端Activity操作服务端Service播放音乐的实例演示AIDL的使用。 开发工具: eclipse 3.7indigo android sdk 4.1 adt 20.0.2 服务端代码结构 客户端代码结构 被标记的就是需要动手的。 服务端 新建一个android application project命名为PlayerServer。 在res下的raw文件夹里面放入一个音乐文件我这里放入的是Delta Goodrem的《Lost Without You》片段。如果不存在raw这个文件夹就自己新建一个命名为raw。这个文件夹在raw文件夹下与layout文件夹平级。raw中的文件遵守标识符的命名规则不要出现中文和空格多个单词可以用下划线连接。 新建一个IRemoteServiice.aidl 文件加入如下代码 package pandafang.demo.playerserver;interface IRemoteService {void play();void stop();} 可见aidl文件的代码跟java的interface一样但是aidl中不能加public等修饰符。Ctrl S 保存后 ADT 会根据这个IRemoteService.aidl文件自动生成IRemoteService.java文件。如同R.java文件一样在“gen/包名”下代码是自动生成的不要手动修改。 接下来就是bound service参考官方文档的知识了。IRemoteService.java 中有一个Stub静态抽象类extends Binder implements IRemoteService。自己动手写一个PlayerService 用来播放音乐播放音乐需要使用android.media.MediaPlayer类。代码如下 package pandafang.demo.playerserver;import java.io.FileDescriptor;import java.io.IOException;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.IBinder;import android.os.RemoteException;import android.util.Log;/*** 播放音乐的服务* author Panda Fang* date 2012-10-22 10:15:33*/public class PlayerService extends Service {public static final String TAG PlayerService;private MediaPlayer mplayer;// 实现aidl文件中定义的接口private IBinder mBinder new IRemoteService.Stub() {Overridepublic void stop() throws RemoteException {try {if (mplayer.isPlaying()) {mplayer.stop();}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}Overridepublic void play() throws RemoteException {try {if (mplayer.isPlaying()) {return;}// start之前需要prepare。// 如果前面实例化mplayer时使用方法一则第一次play的时候直接start不用prepare。// 但是stop一次之后,再次play就需要在start之前prepare了。// 前面使用方法二 这里就简便了 不用判断各种状况mplayer.prepare();mplayer.start();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}};Overridepublic IBinder onBind(Intent intent) {Log.i(TAG,service onbind);if(mplayernull){// 方法一说明// 此方法实例化播放器的同时指定音乐数据源 ,若用此方法在mplayer.start() 之前不需再调用mplayer.prepare() // 官方文档有说明 On success, prepare() will already have been called and must not be called again.// 译文一旦create成功prepare已被调用勿再调用 。查看源代码可知create方法内部已经调用prepare方法。// 方法一开始// mplayer MediaPlayer.create(this, R.raw.lost);// 方法一结束// 方法二说明// 若用此方法在mplayer.start() 之前需要调用mplayer.prepare() // 方法二开始mplayer new MediaPlayer();try {FileDescriptor fd getResources().openRawResourceFd(R.raw.lost).getFileDescriptor(); // 获取音乐数据源mplayer.setDataSource(fd); // 设置数据源mplayer.setLooping(true); // 设为循环播放} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 方法二结束Log.i(TAG,player created);}return mBinder;}Overridepublic boolean onUnbind(Intent intent) {if (mplayer ! null) {mplayer.release();}Log.i(TAG,service onUnbind);return super.onUnbind(intent);}} 服务编写好以后按照惯例在AndroidManifest.xml中加入声明代码如下 需要加入的只是...那段要注意的是 android:process:remote 和 intent-filter 。 运行服务端到设备上准备给客户端调用。 客户端 新建一个android application project命名为PlayerClient。将服务端放有aidl文件的包直接copy到客户端src目录下保留包中的aidl文件其他删除。 编辑 layout 下的 activity_main.xml 布局文件加入两个按钮代码如下 编写MainActivity.java 代码如下 package pandafang.demo.playerclient;import pandafang.demo.playerserver.IRemoteService;import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.os.RemoteException;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;/*** 客户端控制界面* author Panda Fang* date 2012-10-22 10:36:44*/public class MainActivity extends Activity {public static final String TAG MainActivity;// 服务端 AndroidManifest.xml中的intent-filter action声明的字符串public static final String ACTION com.example.playerserver.PlayerService;private Button playbtn, stopbtn;private IRemoteService mService;private boolean isBinded false;private ServiceConnection conn new ServiceConnection() {Overridepublic void onServiceDisconnected(ComponentName name) {isBinded false;mService null;}Overridepublic void onServiceConnected(ComponentName name, IBinder service) {mService IRemoteService.Stub.asInterface(service);isBinded true;}};Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);doBind();initViews();}private void initViews() {playbtn (Button) findViewById(R.id.button1);stopbtn (Button) findViewById(R.id.button2);playbtn.setOnClickListener(clickListener);stopbtn.setOnClickListener(clickListener);}Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_main, menu);return true;}Overrideprotected void onDestroy() {doUnbind();super.onDestroy();}public void doBind() {Intent intent new Intent(ACTION);bindService(intent, conn, Context.BIND_AUTO_CREATE);}public void doUnbind() {if (isBinded) {unbindService(conn);mService null;isBinded false;}}private OnClickListener clickListener new OnClickListener() {Overridepublic void onClick(View v) {if (v.getId() playbtn.getId()) {// playLog.i(TAG,play button clicked);try {mService.play();} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}} else {// stopLog.i(TAG,stop button clicked);try {mService.stop();} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}};} MainActivity是根据向导自动生成的不需要在AndroidManifest.xml中注册声明了。 运行客户端到设备按下按钮可以播放/停止 效果如图 源代码下载http://files.cnblogs.com/lonkiss/AIDLPlayer.zip 更多详细请参考:http://www.baisoujs.com/detail_137434192972690.html 转载于:https://my.oschina.net/u/1189001/blog/147443
http://www.pierceye.com/news/724957/

相关文章:

  • 网站建设合同缴纳印花税吗建设企业网站官网登录
  • 石家庄网站开发多少钱做网站和做程序一样吗
  • cpa项目怎么做必须有网站么百度快速收录3元一条
  • 建造网站 备案产品推广文案100字
  • 希腊网站后缀昆山网站推广
  • 企业网站模板seo个人网站制作成品图片
  • 政务网站群建设需求调研表网站优化方案基本流程
  • 那个网站做调查问卷能赚钱架设一个网站
  • 什么网站是免费的合肥网页设计工资一般多少
  • 学校网站建设招聘提高网站浏览量
  • 特色专业网站建设模板北京网站建设公司分享网站改版注意事项
  • 网站上做地图手机上显示不出来的seo长尾快速排名
  • 网站怎么进行网络推广技术支持 湖州网站建设
  • 旅游找什么网站好仿朋友圈网站建设
  • 设置wordpress首页显示文章摘要aso优化是什么意思
  • 乡镇门户网站建设的现状及发展对策深圳网站建设评价
  • 河南省洛阳市建设银行的网站网站获得流量最好的方法是什么 ( )
  • 西安网站制作托wordpress媒体页
  • 杜集网站建设php网站怎么样
  • 山西做网站敬请期待哦
  • 前台网站开发技术Wordpress 建立学生档案
  • 邯郸网站制作找谁设置备份管理wordpress
  • 乌海学校网站建设镇江抖音seo
  • 网站建设在哪wordpress ping地址
  • 资讯文章网站模板徐州百度推广
  • 网站排名如何做西安有哪些网站设计公司
  • 广州网站开发学校wordpress优秀站点
  • wordpress 当前文章所属分类seo网站推广怎么做
  • 做网站要求电脑配置wordpress页眉描述
  • 做网站感想室内设计联盟邀请码怎么弄