我正在使用下载管理器 api 下载大文件,我也实现了它。但问题是,下载进度的通知显示在状态栏中。但我想使用进度条在活动中显示通知。有没有人做过,如果有请帮帮我。
public class DownloadManagerActivity extends Activity {
private long enqueue;
private DownloadManager dm;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
long downloadId = intent.getLongExtra(
DownloadManager.EXTRA_DOWNLOAD_ID, 0);
Query query = new Query();
query.setFilterById(enqueue);
Cursor c = dm.query(query);
if (c.moveToFirst()) {
int columnIndex = c
.getColumnIndex(DownloadManager.COLUMN_STATUS);
if (DownloadManager.STATUS_SUCCESSFUL == …Run Code Online (Sandbox Code Playgroud) java android download download-manager android-download-manager
我可以使用主扩展文件作为应用程序中的可选下载选项吗?所以我不需要用 APK 文件下载它,但稍后用户会这样做。
我在清单中为ACTION_DOWNLOAD_COMPLETE广播注册了一个 BroadcastReceiver 。
当我收到此广播时,我提取下载 ID:
public class DownloadCompleteBroadcastReceiver
extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
handleDownloadCompleteReceiver(context, intent);
}
}
}
private void handleDownloadCompleteReceiver(Context context, Intent intent) {
long enqueueId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (enqueueId != -1) {
Intent startServiceIntent = new Intent(context, HandleAPKDownloadCompleteIntentService.class);
startServiceIntent.putExtra(HandleAPKDownloadCompleteIntentService.EXTRA_ENQUEUE_ID, enqueueId);
context.startService(startServiceIntent);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到了一个有效的值enqueueId并开始IntentService处理下载的文件:
@Override
protected void onHandleIntent(Intent intent) {
long enqueueId …Run Code Online (Sandbox Code Playgroud) 我正在使用 Google 的下载库进行扩展包下载,通过“Android SDK”管理器分发。使用 Eclipse/Ant 构建,因为还没有迁移到 AS/Gradle - 但任何解决方案都会有所帮助。
在 API 23 中,Apache HTTP 消失了。我已经实施了一种解决方法来编译 Google 的 LVL。(Lvl 库和 android 棉花糖)
但是下载库要解决的问题要大得多,而且不确定我是否真的想修复 Google 的代码 - 如果需要,可能只是编写自己的代码。
有谁知道方便的“插入”(-ish)替换库或合适的解决方法?
~~
'com.google.android.vending.expansion.downloader.impl.AndroidHttpClient' 中不可用导入的编译错误
导入 org.apache.http.Header; 导入 org.apache.http.HttpEntity; 导入 org.apache.http.HttpEntityEnclosureRequest; 导入 org.apache.http.HttpException; 导入 org.apache.http.HttpHost; 导入 org.apache.http.HttpRequest; 导入 org.apache.http.HttpRequestInterceptor; 导入 org.apache.http.HttpResponse; 导入 org.apache.http.client.ClientProtocolException; 导入 org.apache.http.client.HttpClient; 导入 org.apache.http.client.ResponseHandler; 导入 org.apache.http.client.methods.HttpUriRequest; 导入 org.apache.http.client.params.HttpClientParams; 导入 org.apache.http.client.protocol.ClientContext; 导入 org.apache.http.conn.ClientConnectionManager; 导入 org.apache.http.conn.scheme.PlainSocketFactory; 导入 org.apache.http.conn.scheme.Scheme; 导入 org.apache.http.conn.scheme.SchemeRegistry; 导入 org.apache.http.conn.scheme.SocketFactory; 导入 org.apache.http.conn.ssl.SSLSocketFactory;导入 org.apache.http.entity.AbstractHttpEntity; 导入 org.apache.http.entity.ByteArrayEntity; 导入 org.apache.http.impl.client.DefaultHttpClient; 导入 org.apache.http.impl.client.RequestWrapper; 导入 …
android android-download-manager androidhttpclient android-6.0-marshmallow
我不知道为什么,但即使文件正在下载,我也总是 STATUS_PENDING 并且它必须是 STATUS_RUNNING。
如果使用可延迟运行的递归方法,在同一 ID 上反复几秒钟后,我得到了正确的状态。有任何想法吗?
获取状态的代码是:
public static void checkStatus(long downloadId) {
DownloadManager.Query query = new DownloadManager.Query();
Cursor cursor = manager.query(query.setFilterById(downloadId));
if(cursor.moveToFirst()){
int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
switch (status) {
case DownloadManager.STATUS_PENDING:
Log.d("status", "STATUS_PENDING");
//here you can set your TIMEOUT solution
break;
case DownloadManager.STATUS_PAUSED:
Log.d("status", "STATUS_PAUSED");
break;
case DownloadManager.STATUS_RUNNING:
Log.d("status", "STATUS_RUNNING");
break;
case DownloadManager.STATUS_SUCCESSFUL:
Log.d("status", "STATUS_SUCCESSFUL");
break;
case DownloadManager.STATUS_FAILED:
Log.d("status", "STATUS_FAILED");
break;
}
}
}
Run Code Online (Sandbox Code Playgroud) 现在这不是一个真正的编程问题,而更像是一个起点。我正在尝试编写一个 Android 应用程序,以每隔几秒和配置文件下载和上传速度进行采样,以及一些更多信息,例如时间戳、GPS 提供的经度和纬度,并在完成后将所有内容另存为 .csv 文件。
我想知道是否有任何 API、库或项目可以用作起点?任何提示?
我找到了ConnectionClass,但我不确定它是否提供了足够的灵活性来做到这一点。
在 android 中通过下载管理器下载有时不会下载并抛出错误路径似乎无效,并在一段时间后自行纠正。这是 Android 下载管理器非常不寻常的行为。
我正在通过以下方式下载到外部存储 request.setDestinationInExternalPublicDir("/app/" , my_app.apk)
当它不下载时,它会在 logcat 中抛出这个错误:-
W/DownloadManager: Path appears to be invalid: /storage/emulated/0/app/my_app.apk
Run Code Online (Sandbox Code Playgroud)
我认为这是因为我在 Android 中的自定义目录中下载,但我不能使用Environment.DIRECTORY_DOWNLOADS,我只能在自定义目录中下载。
如果有人有答案,请告诉我。)
我的 Android 应用程序中有一个 webview。当用户转到 webview 并单击链接下载文件时,没有任何反应。
我正在尝试通过在 UIDAI 网站中输入 aadhaar 编号来下载 offlineaadhaaar zip。但我无法下载文件。请检查我的代码。我试过下载监听器。但下载监听器没有被调用。
public class WebviewActivity extends AppCompatActivity {
private WebView webView;
private ProgressDialog dialog;
private ProgressDialog progress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
webView=(WebView) findViewById(R.id.webView);
webView.setInitialScale(0);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setSupportMultipleWindows(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(false);
webView.getSettings().setDomStorageEnabled(true);
if (Build.VERSION.SDK_INT >= 19) {
webView.setWebContentsDebuggingEnabled(false);
}
if (Build.VERSION.SDK_INT >= 26) {
webView.getSettings().setMixedContentMode(0);
}
webView.clearCache(true);
webView.clearHistory();
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(false);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("https://resident.uidai.gov.in/offlineaadhaar");
webView.setWebChromeClient(new WebChromeClient() {
@Override
public …Run Code Online (Sandbox Code Playgroud) 我的下载管理器未在状态栏中显示通知图标。当您打开所有通知但状态栏中没有图标时,通知是他们的,因此人们无法一眼看出下载已开始。这在较旧的设备上不是问题,并且仅在运行 android 9 pie 的 android 手机上。
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(youtubeDataModel.getUrl()));
request.setDescription("Downloading " + simpleFileType + "...");
request.setTitle(fileName);
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationUri(Uri.fromFile(new File(downloadLocation + "/" + fileName + "." + fileExtension)));
DownloadManager manager = (DownloadManager) activity.getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
Run Code Online (Sandbox Code Playgroud)
我希望状态栏显示一个小下载图标,但在较新的设备上它没有
我曾尝试使用 Android 的 DownloadManager apis 进行下载,但未能成功。
这是我的示例代码,它返回给我下载失败。
webView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
String filename = URLUtil.guessFileName(url, contentDisposition, mimetype);
DownloadManager.Request request = new DownloadManager.Request(
Uri.parse(url));
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); //Notify client once download is completed!
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename);
DownloadManager dm = (DownloadManager) MainActivity.this.getSystemService(MainActivity.this.DOWNLOAD_SERVICE);
dm.enqueue(request);
}
});
Run Code Online (Sandbox Code Playgroud)