• 1、向服务传送复杂的类型实例(服务端程序)(摘自ProAndroid2)


    1、服务端:

    (1)Person类:

    package com.syh;
    
    import android.os.Parcel;
    import android.os.Parcelable;
    
    public class Person implements Parcelable{
        private int age;
        private String name;
        public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
            @Override
            public Person createFromParcel(Parcel in){
                return new Person(in);
            }
            
            @Override
            public Person[] newArray(int size){
                return new Person[size];
            }
        };
        
        public Person(){
            
        }
        private Person(Parcel in){
            readFromParcel(in);
        }
        
        public int describeContents(){
            return 0;
        }
        public void writeToParcel(Parcel out, int flags){
            out.writeInt(age);
            out.writeString(name);
        }
        public void readFromParcel(Parcel in){
            this.age = in.readInt();
            this.name = in.readString();
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        
        
    }

    (2)Person.aidl文件:要求于Person.java在同一个文件夹下

    package com.syh;
    parcelable Person;

    (3)服务类StockQuoteService2.java:用到的Notification和PendingIntent,第一次用android手机调试,才明白“通知”和“即将发生的意图”的意思

    package com.syh;
    
    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.app.Service;
    import android.content.Intent;
    import android.os.IBinder;
    
    public class StockQuoteService2 extends Service{
        private NotificationManager notificationMgr;
        public class StockQuoteService2Impl extends IStockQuoteService.Stub{
            public String getQuote(String ticker, Person requester){
                return "Hello " + requester.getName() + "! Quote for" + ticker + " is 20.0";
            }
        }
        
        
        public void onCreate(){
            super.onCreate();
            notificationMgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
            displayNotificationMessage("OnCreate() called in StockQuoteService2");
        }
        
        public void onDestroy(){
            displayNotificationMessage("onDestroy() called in StockQuoteService2");
            super.onDestroy();
        }
        
        public void onStart(Intent intent, int startId){
            super.onStart(intent, startId);
        }
        
        public IBinder onBind(Intent intent){
            displayNotificationMessage("onDestroy() called in StockQuoteService2");
            return new StockQuoteService2Impl();
        }
        
        private void displayNotificationMessage(String message){
            Notification notification = new Notification(R.drawable.oneyear, message, System.currentTimeMillis());
            PendingIntent currentIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0);
            notification.setLatestEventInfo(this, "StockeQuoteService2", message, currentIntent);
            notificationMgr.notify(R.id.app_notification_id, notification);
        }
    
    }

    (4)main.xml

    <?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" >
    
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/hello" />
         <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="This is where the service wourld ask for help" />
    
    </LinearLayout>

    (5)strings.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Hello World, MainActivity!</string>
        <string name="app_name">AndroidServiceRemote2</string>
        <item type="id" name="app_notification_id"></item>
    </resources>

    (6)AndroidMinifest.xml:服务在此声明,这样在同台android设备上的其他android程序可以通过bind/unbind进行访问。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.syh"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk android:minSdkVersion="7" />
    
        <application
            android:icon="@drawable/oneyear"
            android:label="@string/app_name" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <service android:name="StockQuoteService2">
                <intent-filter>
                    <action android:name="com.syh.IStockQuoteService"/>
                </intent-filter>
            </service>
        </application>
    
    </manifest>
  • 相关阅读:
    Windows 之 手机访问 PC 端本地部署的站点
    Java 之 Given final block not properly padded
    关于ie7下display:inline-block;不支持的解决方案
    Oracle 之 获取当前日期及日期格式化
    WebService 之 实例学习一
    第 3 章 共享程序集和强命名程序集
    第 2 章 生成、打包、部署和管理应用程序及类型
    第一章 CLR的执行模型
    CLR 之 内容概述
    网站跨站点脚本,Sql注入等攻击的处理
  • 原文地址:https://www.cnblogs.com/wangle1001986/p/2651624.html
Copyright © 2020-2023  润新知