AndroidのSDKパッケージ、外部インタフェースを提供

プロジェクトは、サーバ部分への接続を作成する必要があり、サービスモジュールのjarファイルを生成します。このパッケージにより、その他の製品は、サーバ・アプリケーションを開発素早く接続することができます。利点があるサービスを行います。

1。背景には、あなたは常にサーバへの接続を維持することができます

2。唯一の外部インタフェースを提供できるサービスは、特定の機能は、社内のサービスを実施しています

3。プロジェクトコードの結合を増加

私はいくつかのサードパーティのjarパッケージの外観を使用するSDKを開きます。

2968974-f64527fbc8ce236b
2968974-e0721d4d2d9b7d0e

これは、ジャーパケット音声認識SDKのマイクロ手紙の内容です

2968974-0ae956af618ad6b9

私たちは、一般的なSDKのコースを開発し、サービスを開始bingserviceの方法によって開始されたリモートサービスの定義です。

同時に、通信アプリケーションおよびサービスの方法は、Messengerを持っているとAIDLは、それの特定の物品との間の違いを見てください。

私たちは、SDKを開発するためにここにいるので、AIDLを使用することを選択したあなたのSDKがどんなサービスが含まれていない場合には、当然のことながら、子供のようなものはありません。

今の例を説明し、サービスコールプロセスを作成します。機能の例としては、サービスの数値を設定し、内部サービスから読み出すことです。2つのアクションをトリガするために2つの以上のボタンを配置するための主なインタフェースは、呼び出しの結果は、logcatに表示されています。

最初のプロジェクトを作成し、その後、次のプロジェクトのSRCでパッケージを作成AIDLファイルを配置するためのサービスのためのコードだけでなく、パッケージを配置します。ターンではバッグやAIDLサービスクラスファイル内に配置。次のように、作成した後。

次のようにどのCloudServiceInterface.aidl文書が読み取ります。

packagecom.rayleigh.aidl;


interfaceCloudServiceInterface {

   SETINFO(intperson)を無効に。

   int型はgetinfo();

}

次のようにCloudService.javaファイルは読み取ります。

packagecom.rayleigh.cloud;


importcom.rayleigh.aidl.CloudServiceInterface;


輸入android.app.Service。

importandroid.content.Intent;

importandroid.os.IBinder;

importandroid.util.Log;


publicclass CloudService extends Service {


       private int testdata = 0;

    public CloudService() {

    }


    private static final StringTAG="Test";


    @Override

    public void onCreate()

    {

        Log.i(TAG, "ServiceonCreate--->");

        //TODO:register broadcast

        //// TODO: 2016/12/18  or start do something

        super.onCreate();

    }


    @Override

    public int onStartCommand(Intent intent,int flags, int startId) {

       // return super.onStartCommand(intent,flags, startId);

        return START_STICKY;

    }

    @Override

    public void onDestroy()

    {

        Log.i(TAG, "ServiceonDestroy--->");

        //TODO: unregister broadcast

        super.onDestroy();

    }

    @Override

    public boolean onUnbind(Intent intent) {

        Log.i(TAG, "Serviceonunbind--->");

        return super.onUnbind(intent);

    }

    @Override

    public void onRebind(Intent intent) {

        Log.i(TAG, "Serviceonrebond--->");

        super.onRebind(intent);

    }

   @Override

    public IBinder onBind(Intent intent) {

        // TODO: Return the communicationchannel to the service.

       // throw new UnsupportedOperationException("Notyet implemented");

        return mBinder;

    }

    private final CloudServiceInterface.StubmBinder = new CloudServiceInterface.Stub() {

        @Override

        public void setInfo(int person)  {

            testdata = person;

        }

        @Override

        public int getInfo()   {

            return testdata;

        }

    };

}

然后点击project->clean,来编译项目。就会在gen目录里生成了CloudServiceInterface.aidl所用对应的CloudServiceInterface.java。如下:

然后在AndroidMannifest.xml里面添加服务声明:

<service

            android:name="com.rayleigh.cloud.CloudService"

            android:process=":remote"

            >

            <intent-filter >

                <action

                    android:name="com.rayleigh.cloud.CloudService"/>

            </intent-filter>

        </service>


然后在MainActivity.java里面定义服务对象:

CloudServiceInterfacemService;


    private ServiceConnectionserviceConnection =new ServiceConnection() {

        @Override

        publicvoid onServiceConnected(ComponentName componentName,IBinder iBinder) {

           Log.e("on","on service connected");

           mService = CloudServiceInterface.Stub.asInterface(iBinder);

        }


        @Override

        publicvoid onServiceDisconnected(ComponentName componentName) {

           Log.e("on","on service disconnected");

           mService = null;

        }

};


然后调用bindService函数启用服务。我定义成函数如下:

private void connectionToService() {

         Intent intent=newIntent(MainActivity.this,CloudService.class);

         this.getApplicationContext().bindService(intent,serviceConnection,Context.BIND_AUTO_CREATE);

  }

在onCreate里面调用此函数。


最后onCreate里面的内容如下:

    @Override

    protected void onCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        startBtn = (Button)findViewById(R.id.StartBtn);

        stopBtn = (Button) findViewById(R.id.StopBtn);


        startBtn.setOnClickListener(listener);

        stopBtn.setOnClickListener(listener);

        connectionToService();

}

其中按键点击响应函数如下:

private View.OnClickListener listener = newView.OnClickListener()

    {

        @Override

        public void onClick(Viewv)

        {

            switch (v.getId())

            {

                case R.id.StartBtn:

                    if (mService != null){

                        try {

                           mService.setInfo(3);

                            Log.e("mainactivity","setvalue success");

                        } catch (Exceptione){

                        }

                    } else {

                        Log.e("mainactivity","mServiceis null");

                    }

                    break;

                case R.id.StopBtn:


                    if (mService != null){

                        try {

                            int a= mService.getInfo();

                            Log.e("mainactivity","getvalue is :"+ a);

                        } catch (Exceptione) {

                        }

                    } else {

                        Log.e("mainactivity","mServiceis null");

                   }

                    break;

                default:

                    break;

            }

        }

    };


分别点击两个按键来,设置数字到服务里,和从服务里获取数据

这个例子很简单,看代码就可以了

转载于:https://www.jianshu.com/p/934246808bc6

おすすめ

転載: blog.csdn.net/weixin_33690963/article/details/91114992