有好多广播 比如 有序 全局 本地
就放一种 是 全局广播 比较会的就这一种
里面FactorialReceiver这是接收者 里面有求阶乘的方法
public class FactorialActivity extends AppCompatActivity {
EditText editText;
TextView textResult;
FactorialReceiver factorialReceiverReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_factorial);
editText=(EditText)findViewById(R.id.editText);
factorialReceiverReceiver=new FactorialReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("my.action");
this.registerReceiver(factorialReceiverReceiver,filter);
}
@Override
protected void onDestroy(){
super.onDestroy();
this.unregisterReceiver(factorialReceiverReceiver);
}
public void btnConClick(View view) {
Intent intent=new Intent();
intent.setAction("my.action");
intent.putExtra("number",editText.getText().toString());
Toast.makeText(FactorialActivity.this, "number="+editText.getText().toString(), Toast.LENGTH_LONG).show();
this.sendBroadcast(intent);
}
class FactorialReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
//接收number
String number=intent.getStringExtra("number");
Toast.makeText(FactorialActivity.this, "成功接收number="+number,Toast.LENGTH_LONG).show();
int intNumber=Integer.parseInt(number);
int result=1;
for(int i=1;i<=intNumber;i++){
result=result*i;
}
if(intNumber==0){
result=0;
}
textResult=(TextView)findViewById(R.id.textResult);
textResult.append(intNumber+"的阶乘是"+result+"\n");
}
}
}
效果图:
后面用的append进行文字添加的

service 有很多种方式与 activity联系 包括 start 和 绑定 start不同命(程序停止 service不停)绑定是同名的
绑定service分显式隐式
隐式需要注册动作如下
<service
android:name=".MathService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="my.service.Myservice" />
</intent-filter>
</service>
下面是activity的代码 里面有两种 显式的已经注释掉了
public class MathServiceActivity extends AppCompatActivity {
EditText txtNumber;
TextView txtResult;
MathService.MyBinder binder;
MathService mathService;
private ServiceConnection conn=new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
binder = (MathService.MyBinder) service;
mathService = binder.getService();
}
@Override
public void onServiceDisconnected(ComponentName name) {
System.out.println("close");
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_math_service);
txtNumber = (EditText)findViewById(R.id.txtNumber);
txtResult = (TextView)findViewById(R.id.textResult);
}
public void btnStartClick(View view){
//显式启动
//Intent intent = new Intent(this,MathService.class);
//bindService(intent,conn, Service.BIND_AUTO_CREATE);
//隐式启动
Intent intent1 = new Intent();
intent1.setAction("my.service.Myservice");
intent1.setPackage("com.example.myapplication");
bindService(intent1,conn,Service.BIND_AUTO_CREATE);
}
public void btnStopClick(View view){
//现式解绑
//unbindService(conn);
//隐式解绑
Intent intent1 = new Intent();
intent1.setAction("my.service.Myservice");
intent1.setPackage("com.example.myapplication");
unbindService(conn);
}
public void btnSumClick(View view){
if(txtNumber.getText().toString().trim().length()==0)
return;
int sum=mathService.getSum(Integer.parseInt(txtNumber.getText().toString().trim()));
txtResult.setText(String.valueOf(sum));
}
public void btnJieChengClick(View view){
if(txtNumber.getText().toString().trim().length()==0)
return;
int sum=mathService.getJieCheng(Integer.parseInt(txtNumber.getText().toString().trim()));
txtResult.setText(String.valueOf(sum));
}
}
值得一提的是 你看我的阶乘方法 和 求和方法 在service中一个是在binder类里面的 一个是在外面的就是放在activity里调用方式不一样但是实现效果没啥大不同
public class MathService extends Service {
MyBinder binder = new MyBinder();
public MathService() {
super();
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return binder;
}
public class MyBinder extends Binder {
public MathService getService(){
return MathService.this;
}
}
public double getMaxFromArray(double[] myArray){
if(myArray==null)
return -1;
double max=myArray[0];
for(int i=1;i<myArray.length;i++){
if(max<myArray[i])
max=myArray[i];
}
return max;
}
public int getSum(int maxNumber){
int sum=0;
for(int i=1;i<=maxNumber;i++)
sum=sum+i;
return sum;
}
public int getJieCheng(int maxNumber){
if(maxNumber>10)
return 0;
int sum=1;
for(int i=1;i<=maxNumber;i++)
sum=sum*i;
return sum;
}
}
给你看一眼效果图 我就不沾前台了

有一个小问题 必须要点两次解绑定才可以不能计算并退出程序 还不知道为啥 哪个大佬知道给说说吧
本文深入探讨了Android中广播与服务的通信机制,通过实例展示了全局广播的使用,包括发送和接收广播的过程,以及如何在服务中实现阶乘和求和功能。同时,介绍了活动与服务之间的显式和隐式绑定方法。

被折叠的 条评论
为什么被折叠?



