我希望能够以通常的方式运行标准的Android浏览器,导航到带有指向文件的链接的页面,例如
<a href=./myfile.gcsb>click here</a>
点击该链接,让它启动我的应用程序,然后可以根据需要处理该文件。
网页基本上运行正常 - 点击PC上的Firefox链接,按预期我可以选择保存文件,或者使用注册的应用程序打开.gcsb文件类型。但不是在Android设备上。
我已经在我的应用程序中尝试了每个版本的intent-filter,但是,例如
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="*" android:mimeType="application/*" android:pathPattern=".*\\.gcsb" />
</intent-filter>
并且没有一个导致应用程序在单击浏览器中的链接时启动。
我知道有很多关于此的帖子,但到目前为止他们都没有帮助我解决这个问题。任何建议都感激不尽。 (运行Android OS 2.2)。
答案 0 :(得分:2)
对它进行排序。首先从其他帖子看来,在同一个窗口中从Android浏览器打开链接通常存在问题。因此将target = _blank添加到原始
<a href ...> ...
处理了这个问题(虽然最后见了附带条件)。
看似有效的意图过滤器是
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="*" android:pathPattern=".*\\.gcsb" />
</intent-filter>
并且活动onCreate()/ onRestart()中的代码是
String action = intent.getAction();
if (!Intent.ACTION_VIEW.equals(action))
return;
Uri uri = intent.getData();
String scheme = uri.getScheme();
String name = null;
if (scheme.equals("http")) {
List<String>
pathSegments = uri.getPathSegments();
if (pathSegments.size() > 0)
name = pathSegments.get(pathSegments.size() - 1);
URL url = new URL(uri.toString());
HttpURLConnection
urlConnection = (HttpURLConnection)url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
is = urlConnection.getInputStream();
}
else if () {
// Deal with other schemes (file, content) here
}
// Should have an open input stream and a target file name/ext by here
// Make full path to where it needs to be saved from name
// Open output stream
// Loop round reading a buffer full of data from input stream and writing to output stream
// Close everything
// Not forgetting to deal with errors along the way
这一切似乎都有效,有两个附带条件:(1)所有这一切都应该在后台线程中完成,并且(2)target = _blank的效果是让android浏览器到 每次下载完成后都会打开新窗口 - 并且打开的窗口数量有限制。