既能快速试错,也能稳健扩展
Android 应用详情下载教程示例
清单文件
```xml
package="com.example.myapp"> android:name=".App" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.MyApp"> 
```
主活动(MainActivity.java)
```java
package com.example.myapp;
import android.annotation.SuppressLint;
import android.app.DownloadManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private EditText urlEditText;
private Button downloadButton;
private Button cancelButton;
private long downloadId;
private boolean isDownloading;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
urlEditText = findViewById(R.id.url_edit_text);
downloadButton = findViewById(R.id.download_button);
cancelButton = findViewById(R.id.cancel_button);
// Register a broadcast receiver to listen for download completion
IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
registerReceiver(downloadCompleteReceiver, filter);
downloadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
downloadFile(urlEditText.getText().toString());
}
});
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
cancelDownload();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(downloadCompleteReceiver);
}
// Request the download of a file
@SuppressLint("NewApi")
private void downloadFile(String url) {
if (isDownloading) {
Toast.makeText(getApplicationContext(), "Download already in progress", Toast.LENGTH_SHORT).show();
return;
}
DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
// Set the destination for the downloaded file
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "my_downloaded_file.apk");
// Enqueue the download request and save the download ID
downloadId = downloadManager.enqueue(request);
isDownloading = true;
Toast.makeText(getApplicationContext(), "Download started", Toast.LENGTH_SHORT).show();
}
// Cancel the current download if it is in progress
private void cancelDownload() {
if (!isDownloading) {
Toast.makeText(getApplicationContext(), "No download in progress", Toast.LENGTH_SHORT).show();
return;
}
DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
downloadManager.remove(downloadId);
isDownloading = false;
Toast.makeText(getApplicationContext(), "Download cancelled", Toast.LENGTH_SHORT).show();
}
// Broadcast receiver to listen for download completion
private BroadcastReceiver downloadCompleteReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {
long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (id == downloadId) {
isDownloading = false;
// Get the downloaded file path
DownloadManager downloadManager = (DownloadManager) context.getSystemService(DOWNLOAD_SERVICE);
Uri downloadedFileUri = downloadManager.getUriForDownloadedFile(downloadId);
// Open the downloaded file in an appropriate app
Intent openFileIntent = new Intent(Intent.ACTION_VIEW);
openFileIntent.setDataAndType(downloadedFileUri, "application/vnd.android.package-archive");
openFileIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(openFileIntent);
}
}
}
};
}
```
使用指南
在 `AndroidManifest.xml` 中添加必要的权限和配置。
在 `MainActivity` 中添加一个 `EditText` 控件用于获取要详情下载教程的文件的 URL,以及两个按钮用于启动和取消详情下载教程。
注册一个广播接收器以监听详情下载教程完成事件。
4. 实现 `downloadFile()` 方法以请求文件详情下载教程。
5. 实现 `cancelDownload()` 方法以取消正在进行的详情下载教程。
6. 在广播接收器中,监听详情下载教程完成并打开已详情下载教程的文件。
运行
导入项目并运行它。
输入要详情下载教程的文件的 URL。
单击“详情下载教程”按钮开始详情下载教程。
4. 单击“取消”按钮取消详情下载教程(可选)。
5. 详情下载教程完成时,系统会自动打开已详情下载教程的文件。
下一篇:陌陌实名账号:绥化游戏平台代理