当前位置:   article > 正文

Android使用接口回调方式实现Service向activity传递数据_android service 传递数据

android service 传递数据

一、开启服务的时候,如果我们是通过bindService来绑定服务并且要向服务传递数据,可以直接在Intent中设置bundle来达到效果,但是如果是我们需要从服务中返回一些数据到Activity中的时候,实现起来就有各种各样的方法,比如说使用回调,使用广播等等,今天说的是使用回调的方法。

二、测试源码

  1、布局文件\interfaceservicecallback\app\src\main\res\layout\activity_main.xml代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"
  4.     xmlns:tools="http://schemas.android.com/tools"
  5.     android:layout_width="match_parent"
  6.     android:layout_height="match_parent"
  7.     tools:context=".MainActivity">
  8.  
  9.     <TextView
  10.         android:id="@+id/tvOut"
  11.         android:layout_width="wrap_content"
  12.         android:layout_height="150dp"
  13.         android:textSize="50dp"
  14.         android:text="Hello World!"
  15.         app:layout_constraintBottom_toBottomOf="parent"
  16.         app:layout_constraintLeft_toLeftOf="parent"
  17.         app:layout_constraintRight_toRightOf="parent"
  18.         app:layout_constraintTop_toTopOf="parent" />
  19.  
  20.     <Button
  21.         android:id="@+id/btnBindService"
  22.         android:layout_width="wrap_content"
  23.         android:layout_height="wrap_content"
  24.         android:text="start service"
  25.         tools:layout_editor_absoluteX="129
  26.         tools:layout_editor_absoluteY="128dp" />
  27.  
  28. </android.support.constraint.ConstraintLayout>

  2、com/example/interfaceservicecallback/MainActivity.java

  1. package com.example.interfaceservicecallback;
  2.  
  3. import android.app.Service;
  4. import android.content.ComponentName;
  5. import android.content.Intent;
  6. import android.content.ServiceConnection;
  7. import android.os.Bundle;
  8. import android.os.Handler;
  9. import android.os.IBinder;
  10. import android.os.Message;
  11. import java.text.SimpleDateFormat;
  12. import java.util.Date;
  13. import java.util.Timer;
  14. import java.util.TimerTask;
  15.  
  16. import android.support.v7.app.AppCompatActivity;
  17. import android.util.Log;
  18. import android.view.View;
  19. import android.widget.TextView;
  20. public class MainActivity extends AppCompatActivity implements View.OnClickListener, ServiceConnection {
  21.  
  22.         private TextView tvOut;
  23.  
  24.         @Override
  25.         protected void onCreate(Bundle savedInstanceState) {
  26.             super.onCreate(savedInstanceState);
  27.             setContentView(R.layout.activity_main);
  28.             tvOut = (TextView) findViewById(R.id.tvOut);
  29.             findViewById(R.id.btnBindService).setOnClickListener(this);
  30.         }
  31.  
  32.         @Override
  33.         public void onClick(View v) {
  34.             bindService(new Intent(this, MyService.class), this, BIND_AUTO_CREATE);
  35.         }        @Override
  36.         public void onServiceConnected(ComponentName name, IBinder service) {
  37.             MyService.Binder binder = (MyService.Binder) service;
  38.             MyService myService = binder.getService();
  39.             myService.setCallback(new MyService.Callback() {
  40.                 @Override
  41.                 public void onDataChange(String data) {
  42.                     Message msg = new Message();
  43.                     msg.obj = data;
  44.                     handler.sendMessage(msg);
  45.                 }
  46.             });
  47.         }
  48.  
  49.         @Override
  50.         public void onServiceDisconnected(ComponentName name) {
  51.  
  52.         }
  53.         private Handler handler = new Handler() {
  54.             @Override
  55.             public void handleMessage(Message msg) {
  56.                 super.handleMessage(msg);
  57.                 tvOut.setText(msg.obj.toString());
  58.             }
  59.         };
  60.     }

3、service文件com/example/interfaceservicecallback/MyService.java

  1. package com.example.interfaceservicecallback;
  2.  
  3. import android.app.Service;
  4. import android.content.Intent;
  5. import android.os.IBinder;
  6. import android.os.Message;
  7. import java.text.SimpleDateFormat;
  8. import java.util.Date;
  9. import java.util.Timer;
  10. import java.util.TimerTask;
  11. import android.support.annotation.Nullable;
  12. import android.util.Log;
  13. public class MyService extends Service {
  14.     private boolean connecting = false;
  15.     private Callback callback;
  16.  
  17.     @Nullable
  18.     @Override
  19.     public IBinder onBind(Intent intent) {
  20.         return new Binder();
  21.     }
  22.  
  23.     public class Binder extends android.os.Binder {
  24.         public MyService getService() {
  25.             return MyService.this;
  26.         }
  27.     }
  28.  
  29.     @Override    public void onCreate() {
  30.         super.onCreate();
  31.         connecting = true;
  32.         new Thread(new Runnable() {
  33.  
  34.             @Override
  35.             public void run() {
  36.                 int i = 0;
  37.                 while (connecting == true) {
  38.                     i++;
  39.                     if (callback != null) {
  40.                         callback.onDataChange(i + "");
  41.                     }
  42.                     try {
  43.                         Thread.sleep(100);
  44.                     } catch (InterruptedException e) {
  45.                         e.printStackTrace();
  46.                     }
  47.                 }
  48.             }
  49.         }).start();
  50.     }
  51.     public void setCallback(Callback callback) {
  52.         this.callback = callback;
  53.     }
  54.  
  55.     public static interface Callback {
  56.         void onDataChange(String data);
  57.     }
  58.  
  59.     @Override
  60.     public void onDestroy() {
  61.         super.onDestroy();
  62.         connecting = false;
  63.     }
  64. }


 4、声明service,app/src/main/AndroidManifest.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.     package="com.example.interfaceservicecallback">
  4.  
  5.     <application
  6.         android:allowBackup="true"
  7.         android:icon="@mipmap/ic_launcher"
  8.         android:label="@string/app_name"
  9.         android:roundIcon="@mipmap/ic_launcher_round"
  10.         android:supportsRtl="true"
  11.         android:theme="@style/AppTheme">
  12.         <activity android:name=".MainActivity">
  13.             <intent-filter>
  14.                 <action android:name="android.intent.action.MAIN" />
  15.  
  16.                 <category android:name="android.intent.category.LAUNCHER" />
  17.             </intent-filter>
  18.         </activity>
  19.         <service
  20.             android:name=".MyService">
  21.         </service>
  22.     </application>
  23.  
  24. </manifest>



原文链接:https://blog.csdn.net/qq_37858386/article/details/103169099

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/265047
推荐阅读
相关标签
  

闽ICP备14008679号