android:广播的简单应用练习

一、题目

我们在layout中设置三个文本框输入每个科目成绩,点击计算跳到Service进行计算平均成绩,并利用广播返回我们的结果,最后在activity中展示出来,其程序流程图如下:

android:广播的简单应用练习

1.首先创建一个Service,并在AndroidManifest之中注册

package com.example.administrator.myapplication.com.BroadCast.com.BroadCast.Service;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.support.annotation.Nullable;

/**
 * Created by Administrator on 2018/5/8.
 */
public class BroadCastService extends Service {
    double result;
    @Override
    public void onCreate() {
        super.onCreate();

    }
    @Override
    public void onDestroy() {
        super.onDestroy();
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        double englise=Double.parseDouble(intent.getStringExtra("englise"));
        double  math=Double.parseDouble(intent.getStringExtra("math"));
        double  chinese=Double.parseDouble(intent.getStringExtra("chinese"));
        result=(englise+math+chinese)/3;
        //获取activity传过来的参数,并进行计算
        Intent resultIntent=new Intent("resultRecevice");
        resultIntent.putExtra("result",result);
        sendBroadcast(resultIntent);
        //向activity发送广播
        return 0;
    }

    @Nullable
    @Override

    public IBinder onBind(Intent intent) {
        return null;
    }


}

2.在activity中向Service传值,activity加载的时候我们就已经在AndroidManifest注册了广播监听

package com.example.administrator.myapplication.com.BroadCast.com.BroadCast.Service;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.example.administrator.myapplication.R;

public class BroadCastServiceActivity extends ActionBarActivity {
    String mEnglise;
    String mMath;
    String mChinese;
    ResultRecevice resultRecevice;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_broad_cast_service);
         resultRecevice=new ResultRecevice();
        registerReceiver(resultRecevice, new IntentFilter("resultRecevice"));
        //activity启动时注册广播接受者

    }

    /**
     * 计算按钮绑定的方法,发送参数到Service
     * @param view
     */
public void calculate(View view)
{
    EditText text1=(EditText)this.findViewById(R.id.englise);
    mEnglise=text1.getText().toString();

    EditText text2=(EditText)this.findViewById(R.id.math);
    mMath=text2.getText().toString();

    EditText text3=(EditText)this.findViewById(R.id.chinese);
    mChinese=text3.getText().toString();

Intent intent=new Intent("com.service");
    intent.putExtra("englise",mEnglise);
    intent.putExtra("math",mMath);
    intent.putExtra("chinese", mChinese);
    startService(intent);//开启事物

}

 /**
     * 广播监听类
     * @param view
     */
class ResultRecevice extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { double result=intent.getDoubleExtra("result", 0); //获取广播中intent的参数 Toast.makeText(BroadCastServiceActivity.this,""+result,Toast.LENGTH_LONG).show(); //将平均成绩展示出来 } } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(resultRecevice); }}

最后运行结果

android:广播的简单应用练习