gpt4 book ai didi

android - 在我的应用程序中处理下载 Intent

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:45 27 4
gpt4 key购买 nike

我的 webview 应用程序已经可以很好地处理外部 URL(打开来自 viber、浏览器等外部应用程序的链接),就像这样-(i got this code from here)

// get URL from browsable intent filter
TextView uri = (TextView) findViewById(R.id.urlField);
// get the url
url = getIntent().getDataString();
Uri data = getIntent().getData();
if (data == null) {
uri.setText("");
} else {
uri.setText(getIntent().getData().toString());
fadeout();
}
// }

在我的 WebView 设置中

// Load URL from Browsable intent filter if there is a valid URL pasted
if (uri.length() > 0)
webView.loadUrl(url);
else
// dont load

这就是我在 webview 中处理下载的方式

// download manager
webView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimeType,
long contentLength) {
DownloadManager.Request request = new DownloadManager.Request(
Uri.parse(url));
request.setMimeType(mimeType);
String cookies = CookieManager.getInstance().getCookie(url);
request.addRequestHeader("cookie", cookies);
request.addRequestHeader("User-Agent", userAgent);
request.setDescription("Downloading file...");
request.setTitle(URLUtil.guessFileName(url, contentDisposition,
mimeType));
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(
Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(
url, contentDisposition, mimeType));
DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
dm.enqueue(request);
Toast.makeText(getApplicationContext(), "Downloading File",
Toast.LENGTH_LONG).show();
}
});
// download manager

但是,我也想处理其他应用程序传递的下载 Intent 。我该怎么做?

这是我用来从另一个应用程序打开系统默认应用程序选择器的方法。(我的应用程序列在这里)-

   // download via...
webView.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype,
long contentLength) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
Toast.makeText(getApplicationContext(), "don't choose our app as it can't handle download intents, i have posted a question on stackoverflow though.",
Toast.LENGTH_SHORT).show();
}
});
// download via..

每当我单击下载链接时,我的应用程序都会打开,但只是静止不动,而不是打开 url。我希望它像下载器应用一样运行

最佳答案

你必须解决问题

  • (a) 始终显示选择器
  • (b) 告诉 android 你的应用应该成为选择器的一部分
  • (c) 处理“下载”

(a) 始终显示选择器

替换

startActivity(i);

startActivity(Intent.createChooser(i, "caption of the choser"));

(b) 告诉 android 你的应用应该成为选择器的一部分

在 list 中你必须声明你有一个可以处理相关内容的 Activity

<manifest ... >
<application ... >
<activity android:name=".MyDownloadActivity" ...>
<intent-filter >
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SENDTO" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data
android:mimeType="*/*"
android:scheme="file" />
</intent-filter>
<intent-filter > <!-- mime only SEND(_TO) -->
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SENDTO" />
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.CATEGORY_OPENABLE" />

<!--
these do not work :-(
<data android:scheme="content" android:host="*" />
<data android:scheme="content"
android:host="media"
android:pathPattern="/external/images/media/.*" />
<data android:host="*" android:scheme="content"
android:mimeType="image/*" />
-->
<data android:mimeType="*/*" />
</intent-filter>
</activity>
</application>

</manifest>

* (c) 处理“下载”

我的下载 Activity 您的 MyDownloadActivity.onCreate() 将接收所有用于 SEND、SENDTO、VIEW 的 MIME 类型 */*。有关详细信息,请参阅@Vickyexpert-s 的回答

intent-intercept是一个免费的安卓工具来分析 Intent 。它几乎可以拦截所有 Intent 。您可以查看源代码以了解这是如何完成的。

我使用 sendtosd作为我的通用下载处理程序。它的源代码在 github 上可用

关于android - 在我的应用程序中处理下载 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38175930/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com