安卓开发学习——day8 and day9

写在前面:

今天要实现的是按住按钮,启动服务,耗时10秒,发送广播,然后弹出弹窗,这涉及到服务,广播,弹窗。

1.服务

<font color=#999AAA > 1、onCreate():当Service第一次被创建后立即调用该方法,该方法在Service的生命周期里只被调用一次!
2、onDestory():当Service被关闭时调用该方法,该方法只被调用一次!
3、onStartCommand():当Service被调用时,调用该方法。该方法可被重复调用,并且不会创建新的Service对象,而是复用前面产生的Service对象。
4、onBind():这是Service必须实现的方法,该方法会返回一个IBinder对象,APP通过该对象与Service组件进行通信。
5、onUnBind():当该Service绑定的所有客户端都断开时调用该方法。</font>

(1).创建service:

和Activity类似

package com.example.task4;

import androidx.appcompat.app.AppCompatActivity;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
    

    private Button btnStart;
    private Button btnStop;
    private Button btnStatus;

    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnStart = findViewById(R.id.btn_start);
        btnStop = findViewById(R.id.btn_stop);
        btnStatus = findViewById(R.id.btn_status);

        btnStart.setOnClickListener(this);
        btnStop.setOnClickListener(this);
        btnStatus.setOnClickListener(this);

        AlertDialog alertDialog = new AlertDialog.Builder(this)
                .setTitle("提示")
                .setMessage("资源下载完成")
                .setNeutralButton("确定", new DialogInterface.OnClickListener() {
    
    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
    
    

                    }
                })
                .create();
        alertDialog.show();
    }

    @Override
    public void onClick(View v) {
    
    
        switch (v.getId()) {
    
    
            case R.id.btn_start: {
    
    
                intent = new Intent(this, StartService.class);
                startService(intent);
                break;
            }
            case R.id.btn_stop: {
    
    
                intent = new Intent(this, StartService.class);
                stopService(intent);
                break;
            }
        }
    }
}

(2).在Activity绑定

package com.example.task4;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

import androidx.annotation.Nullable;

public class StartService extends Service {
    
    

    private final String TAG = "StartServer";

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
    
    
        Log.e(TAG, "onBind方法被调用");
        return null;
    }

    //Service创建时调用
    @Override
    public void onCreate() {
    
    
        Log.e(TAG,"onCreate方法被调用");
        super.onCreate();
    }

    //Service被启动时调用
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    
    
        Log.e(TAG,"onStartCommand方法被调用");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
    
    
        Log.e(TAG, "onDestroy方法被调用");
        super.onDestroy();
    }
}

(3).在AndroidManifest中注册Service

Android的四大组件,只有定义了,就必须去AndroidManifest.xml中注册一下

<service android:name=".StartService"
            android:enabled="true"
            android:exported="true"/>

其中enabled属性,是指该服务是否能够被实例化。如果设置为true,则能够被实例化,否则不能被实例化,默认值是true。
exported属性用于指示该服务是否能够被其他应用程序组件调用或跟它交互。如果设置为true,则能够被调用或交互(通常如果一个服务需要跨进程使用需要这么设置),否则不能。设置为false时,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定该服务。

效果

在这里插入图片描述

更多

2.广播

Android动态注册广播分为四个步骤
1、动态注册广播
2、发送广播
3、接收广播
4、销毁广播

package com.example.task4;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
    


    //自定义广播名称
    private static final String DYNAMICACTION = "com.exampleTak4";        //动态广播的Action字符串

    private Button sendmessage;

    //定义接收器
    private  IBroadcast broadcastReceiver;

    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        sendmessage = (Button)findViewById(R.id.button);
        sendmessage.setOnClickListener(this);

    }

    //动态广播注册
    @Override
    protected void onPostResume(){
    
    
        iBroadcast = new IBroadcast();
        IntentFilter intentFilter = new IntentFilter();
        //设置优先级的方式
        intentFilter.addAction(DYNAMICACTION);
        registerReceiver(iBroadcast,intentFilter);

    }

    //销毁广播
    @Override
    protected void onDestroy(){
    
    
        super.onDestroy();
        if(anotherBroadcastReceiver != null){
    
    
            unregisterReceiver(IBroadcast);
        }
    }
    
    
    //接收广播
    private class IBroadcast extends BroadcastReceiver {
    
    
        @Override
        public void onReceive(Context context, Intent intent) {
    
    
            AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this)
                    .setTitle("提示")
                    .setMessage("资源下载完成")
                    .setNeutralButton("确定", new DialogInterface.OnClickListener() {
    
    
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
    
    

                        }
                    })
                    .create();
            alertDialog.show();
        }
    }



    //发送广播
    @Override
    public void onClick(View v) {
    
    
        Intent intent = new Intent();
        intent.setAction(DYNAMICACTION);
        sendBroadcast(intent);
        //有序广播的发送函数
        // sendOrderedBroadcast(intent,null);
    }
}

更多

3.弹窗

今天使用到的弹窗是AlertDialog:

setTitle 为对话框设置标题
setIcon 为对话框设置图标
setMessage 为对话框设置内容
setView 给对话框设置自定义样式
setItems 设置对话框要显示的一个list,一般用于显示几个命令时
setMultiChoiceItems 用来设置对话框显示一系列的复选框
setSingleChoiceItems 用来设置对话框显示一系列的单选框
setNeutralButton 普通按钮
setPositiveButton 给对话框添加"Yes"按钮
setNegativeButton 对话框添加"No"按钮
create 创建对话框
show 显示对话框
AlertDialog alertDialog = new AlertDialog.Builder(this)
                .setTitle("提示") //
                .setMessage("资源下载完成")
                .setNeutralButton("确定", new DialogInterface.OnClickListener() {
    
    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
    
    
                        
                    }
                })
                .create();
        alertDialog.show();

更多

总结:

这两天学习的服务,广播以及弹窗难度还是有一定的难度,对于这些知识,我了解的也比较片面,需要等以后在细看这些了。

猜你喜欢

转载自blog.csdn.net/weixin_45936162/article/details/112794434