package com.example.sh3;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.Manifest;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private DownloadService.DownloadBinder downloadBinder;
    private boolean isContinue = false;
    private boolean isDownload = false;

    private ServiceConnection connection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            downloadBinder = (DownloadService.DownloadBinder) service;
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button startDownload = findViewById(R.id.start_download);
        Button pauseDownload = findViewById(R.id.pause_download);
        Button cancelDownload = findViewById(R.id.cancel_download);

        pauseDownload.setEnabled(true);
        cancelDownload.setEnabled(false);
        startDownload.setOnClickListener(this);
        pauseDownload.setOnClickListener(this);
        cancelDownload.setOnClickListener(this);
        Intent intent = new Intent(this, DownloadService.class);
        startService(intent);//启动服务
        bindService(intent,connection,BIND_AUTO_CREATE);//绑定服务
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
        }
    }

    @Override
    public void onClick(View v) {
        EditText edittext=(EditText) findViewById(R.id.edit);
        String url,site;
        url=edittext.getText().toString();
        // Toast.makeText(this, site, Toast.LENGTH_SHORT).show();
        if(url.equals(''))
            url= 'https://www.imooc.com/mobile/mukewang.apk';
        // editText.setText(url);

        if (downloadBinder == null) {
            return;
        }
        Button startDownload = findViewById(R.id.start_download);
        Button pauseDownload = findViewById(R.id.pause_download);
        Button cancelDownload = findViewById(R.id.cancel_download);
        int id = v.getId();
        if (id == R.id.start_download) {
            downloadBinder.startDownload(url);
            isDownload = true;
            startDownload.setEnabled(false);
            pauseDownload.setEnabled(true);
            cancelDownload.setEnabled(true);
        } else if (id == R.id.pause_download) {
            if (isDownload) {
                if (!isContinue) {
                    downloadBinder.pauseDownload();
                    pauseDownload.setText('继续下载');
                    pauseDownload.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
                    isContinue = true;
                } else {
                    downloadBinder.startDownload(url);
                    pauseDownload.setText('暂停下载');
                    pauseDownload.setBackgroundColor(getResources().getColor(R.color.colorGray));
                    isContinue = false;
                }
            } else {
                Toast.makeText(this, '请先点击下载', Toast.LENGTH_SHORT).show();
            }
        } else if (id == R.id.cancel_download) {
            downloadBinder.cancelDownload();
            startDownload.setEnabled(true);
            pauseDownload.setEnabled(true);
            cancelDownload.setEnabled(false);
            pauseDownload.setBackgroundColor(getResources().getColor(R.color.colorGray));
        }
    }

    private static final int requestCode=1;
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){
            case 1:
                if(grantResults.length>0&&grantResults[0]!=PackageManager.PERMISSION_GRANTED){
                    Toast.makeText(this,'拒绝权限将无法使用程序',Toast.LENGTH_SHORT).show();
                    finish();
                }
                break;
            default:
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unbindService(connection);
    }
}

这段代码是一个简单的下载功能的实现,主要包括以下几个部分:

  1. 定义了一个DownloadListener接口,用于监听下载的进度和状态。

  2. MainActivity实现了View.OnClickListener接口,用于处理按钮的点击事件。

  3. 在onCreate方法中,初始化了下载服务的绑定和启动,并请求了写入外部存储的权限。

  4. 在onClick方法中,根据按钮的点击事件进行相应的操作。点击开始下载按钮会调用downloadBinder的startDownload方法开始下载,点击暂停下载按钮会根据isContinue的值来判断是暂停还是继续下载,点击取消下载按钮会调用downloadBinder的cancelDownload方法取消下载。

  5. 在onRequestPermissionsResult方法中,处理权限请求的结果。

  6. 在onDestroy方法中,解绑服务。

这段代码的实验结果是,点击开始下载按钮后,会开始下载指定的文件;点击暂停下载按钮会暂停下载,再次点击会继续下载;点击取消下载按钮会取消下载。同时,根据下载的状态,按钮的可用性也会相应地改变。

分析:这段代码实现了一个简单的下载功能,通过绑定和启动服务的方式来进行下载操作。通过点击不同的按钮来控制下载的开始、暂停和取消。同时,通过DownloadListener接口来监听下载的进度和状态,可以根据需要进行相应的处理。

Android 下载功能实现:使用 Service 和 BindService 构建下载器

原文地址: https://www.cveoy.top/t/topic/LXO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录