安卓期末复习之全局广播 + service绑定

有好多广播 比如 有序 全局 本地

就放一种 是 全局广播 比较会的就这一种 

里面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;
    }
}

给你看一眼效果图 我就不沾前台了

有一个小问题 必须要点两次解绑定才可以不能计算并退出程序 还不知道为啥 哪个大佬知道给说说吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值