Android 接口定义Demo

 1 // IAppServiceRemoteBinder.aidl
 2 package com.example.metrox.l16;
 3
 4 // Declare any non-default types here with import statements
 5
 6 interface IAppServiceRemoteBinder {
 7     /**
 8      * Demonstrates some basic types that you can use as parameters
 9      * and return values in AIDL.
10      */
11     void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
12             double aDouble, String aString);
13
14      void setData(String data);
15 }
 1 package com.example.metrox.l16;
 2
 3 import android.app.Service;
 4 import android.content.Intent;
 5 import android.os.IBinder;
 6 import android.os.RemoteException;
 7 import android.provider.Settings;
 8
 9 public class AppService extends Service {
10
11
12     public AppService() {
13     }
14
15     @Override
16     public IBinder onBind(Intent intent) {
17         return new IAppServiceRemoteBinder.Stub() {
18             @Override
19             public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {
20
21             }
22
23             @Override
24             public void setData(String data) throws RemoteException {
25                  AppService.this.data = data;
26             }
27         };
28     }
29
30     @Override
31     public int onStartCommand(Intent intent, int flags, int startId) {
32         return super.onStartCommand(intent, flags, startId);
33     }
34
35     @Override
36     public void onCreate() {
37         super.onCreate();
38         System.out.println("Service OnCreate");
39         new Thread(){
40             @Override
41             public void run() {
42                 super.run();
43                 isRuning = true;
44                 while (isRuning){
45                     System.out.println(data);
46                     try {
47                         sleep(1000);
48                     } catch (InterruptedException e) {
49                         e.printStackTrace();
50                     }
51                 }
52             }
53         }.start();
54     }
55
56     @Override
57     public void onDestroy() {
58         super.onDestroy();
59         System.out.println("Service OnDestroy");
60     }
61
62     private String data = "默认数据";
63     private boolean isRuning = false;
64 }
 1 package com.example.metrox.l16;
 2
 3 import android.content.Intent;
 4 import android.support.v7.app.AppCompatActivity;
 5 import android.os.Bundle;
 6
 7 public class MainActivity extends AppCompatActivity {
 8
 9     @Override
10     protected void onCreate(Bundle savedInstanceState) {
11         super.onCreate(savedInstanceState);
12         setContentView(R.layout.activity_main);
13         startService(new Intent(this,AppService.class));
14     }
15
16     @Override
17     protected void onDestroy() {
18         super.onDestroy();
19         stopService(new Intent(this,AppService.class));
20     }
21 }
 1 package com.example.testapp;
 2
 3 import android.content.ComponentName;
 4 import android.content.Intent;
 5 import android.content.ServiceConnection;
 6 import android.os.IBinder;
 7 import android.os.RemoteException;
 8 import android.support.v7.app.AppCompatActivity;
 9 import android.os.Bundle;
10 import android.view.View;
11 import android.widget.EditText;
12 import android.widget.TextView;
13
14 import com.example.metrox.l16.IAppServiceRemoteBinder;
15
16 public class MainActivity extends AppCompatActivity implements View.OnClickListener, ServiceConnection {
17
18     private TextView textView;
19     private Intent intent;
20     private EditText et;
21     @Override
22     protected void onCreate(Bundle savedInstanceState) {
23         super.onCreate(savedInstanceState);
24         setContentView(R.layout.activity_main);
25         intent = new Intent();
26         intent.setComponent(new ComponentName("com.example.metrox.l16","com.example.metrox.l16.AppService"));
27         textView = (TextView) findViewById(R.id.textView);
28         findViewById(R.id.btnStartAppService).setOnClickListener(this);
29         findViewById(R.id.btnStopAppService).setOnClickListener(this);
30         findViewById(R.id.btnBindAppService).setOnClickListener(this);
31         findViewById(R.id.btnUnBindAppService).setOnClickListener(this);
32         findViewById(R.id.btnSyncData).setOnClickListener(this);
33         et =(EditText) findViewById(R.id.editText);
34     }
35
36     @Override
37     public void onClick(View view) {
38         switch (view.getId()) {
39             case R.id.btnStartAppService:
40                 startService(intent);
41                 break;
42             case R.id.btnStopAppService:
43                 stopService(intent);
44                 break;
45             case R.id.btnBindAppService:
46                 bindService(intent,this,BIND_AUTO_CREATE);
47                 break;
48             case R.id.btnUnBindAppService:
49                 unbindService(this);
50                 binder = null;
51                 break;
52             case R.id.btnSyncData:
53                 if(binder != null){
54                     try {
55                         binder.setData(et.getText().toString());
56                     } catch (RemoteException e) {
57                         e.printStackTrace();
58                     }
59                 }
60                 break;
61         }
62     }
63
64     @Override
65     public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
66         System.out.println("Binder Service");
67         System.out.println(iBinder);
68         binder = IAppServiceRemoteBinder.Stub.asInterface(iBinder);
69     }
70
71     @Override
72     public void onServiceDisconnected(ComponentName componentName) {
73
74     }
75
76     private IAppServiceRemoteBinder binder = null;
77 }

时间: 2024-08-08 05:39:07

Android 接口定义Demo的相关文章

Android学习小Demo(20)关于Fragment的应用

Android在3.0之后引入了Fragment的概念,我猜测其想法可能只是想更好地兼容大屏幕或者平板的开发,因为大屏幕可以展示更多的内容,而内容一多,逻辑有可能就乱,而利用Fragment,则可以将不同的逻辑封装进不同的Fragment中,但是展现呢,还是在同一个Activity中,在同一个屏幕上显示.而对于屏幕并不大的手机来说,如果一个页面展示的东西并不多,那么其实将逻辑直接写在Activity,利用多个Activity实现多个页面的展示,我觉得也是可以接受的,毕竟用Activity还是用F

android 自己定义控件

Android自己定义View实现非常easy 继承View,重写构造函数.onDraw.(onMeasure)等函数. 假设自己定义的View须要有自己定义的属性.须要在values下建立attrs.xml. 在当中定义你的属性. 在使用到自己定义View的xml布局文件里须要增加xmlns:前缀="http://schemas.android.com/apk/res/你的应用所在的包路径". 在使用自己定义属性的时候.使用前缀:属性名,如my:textColor="#FF

Android UI--自定义ListView(实现下拉刷新+加载更多)

http://blog.csdn.net/wwj_748/article/details/12512885 Android UI--自定义ListView(实现下拉刷新+加载更多) 关于实现ListView下拉刷新和加载更多的实现,我想网上一搜就一堆.不过我就没发现比较实用的,要不就是实现起来太复杂,要不就是不健全的.因为小巫近期要开发新浪微博客户端,需要实现ListView的下拉刷新,所以就想把这个UI整合到项目当中去,这里只是一个demo,可以根据项目的需要进行修改. 就不要太在乎界面了哈:

Android学习小Demo(19)利用Loader来实时接收短信

之前写过一篇文章<Android学习小Demo(13)Android中关于ContentObserver的使用>,在里面利用ContentOberver去监测短信URI内容的变化.我们先来回顾一下,是如何利用ContentOberver来监测短信内容的变化的. 1)要自定义一个类,比如SmsContentObserver,继承ContentObserver,并且实现其onChange方法. 2)在onChange方法中去查询对应Uri,比如短信收件箱的内容,并将对应的记录利用Handler发送

Android UI-自定义日历控件

Android UI-自定义日历控件 本篇博客笔者给大家分享一个日历控件,这里有个需求:要求显示当前月的日期,左右可以切换月份来查看日期. 我们想一想会如何去实现这样的一个控件,有开源的,但可能不太满足我们的特定的需求,这里笔者自定义了一个,读者可以根据自己的需求来修改代码.下面来说一下实现的思路: 首先我们要显示当前月份,自然我们要计算出当前的日期,并且把每一天对应到具体的星期,我们会有以下效果: 我们先想一下这样的效果用什么控件可以实现?很自然可以想到用网格视图GridView,但这里笔者使

Android Animation 动画Demo(Frame逐帧动画)

上一篇介绍了Animation动画其一:Tween补间动画. 这篇文章接下来介绍Animation另一种动画形式:Frame逐帧动画. Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画.Frame动画可以被定义在XML文件中,也可以完全编码实现(后面会给出这两种实现方式的源代码Demo). 下面分别介绍: 一.定义在xml中实现: 实现效果图: 源代码: 布局文件:main.xml: <?xml version="1.0" encodin

android 自己定义控件属性(TypedArray以及attrs解释)

近期在捣鼓android 自己定义控件属性,学到了TypedArray以及attrs.在这当中看了一篇大神博客Android 深入理解Android中的自己定义属性.我就更加深入学习力一番.我就沿着这个学习,讲一下流程吧,兴许一篇还有应用. 1.attrs文件编写 <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="titleText" for

如何成功运行SDL官方提供的Android平台的Demo

如何成功运行SDL官方提供的Android平台的Demo 作者:雨水  日期:2014-4-30 编写说明:SDL的官方提供了一个Anroid的demo模板SDLActivity,无法直接运行,按照官方的文档操作过程中也会遇到很多问题,这里把我成功编译并运行的过程记录下来,希望对大家有所帮助! SDL简介:SDL是Simple DirectMedia Layer的缩写,它是一套开源的C语言跨平台多媒体开发库,提供了多种控制图像,声音等接口,广泛用于游戏,媒体播放器,模拟器开发等. 基本环境: 1

Android自己定义控件系列案例【五】

案例效果: 案例分析: 在开发银行相关client的时候或者开发在线支付相关client的时候常常要求用户绑定银行卡,当中银行卡号一般须要空格分隔显示.最常见的就是每4位数以空格进行分隔.以方便用户实时比对自己输入的卡号是否正确.当产品经理或UI设计师把这种需求拿给我们的时候.我们的大脑会立即告诉我们Android中有个EditText控件能够用来输入卡号,但好像没见过能够分隔显示的属性或方法啊.当我们睁大眼睛对着效果图正发呆的时候.突然发现当用户输入内容的时候还出现了清空图标,点击清空图标还能