android:广播的简单应用练习
一、题目
我们在layout中设置三个文本框输入每个科目成绩,点击计算跳到Service进行计算平均成绩,并利用广播返回我们的结果,最后在activity中展示出来,其程序流程图如下:
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); }}