如何阅读在Android网页浏览器中单击文件?单击、网页浏览、器中、文件

2023-09-07 13:05:28 作者:无爱别演

我如何创建一个支持某些文件类型在Web浏览器中单击活动?

下面是我的尝试:

的Andr​​oidManifest.xml

 <清单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android    包=net.sf.asap安卓版code =212机器人:=的versionName2.1.2>    <应用机器人:标签=@字符串/ APP_NAME机器人:图标=@绘制/图标>        <活动机器人:FileSelectorNAME =机器人:标签=@字符串/ APP_NAME>            &所述;意图滤光器>                <作用机器人:名字=android.intent.action.MAIN/>                <类机器人:名字=android.intent.category.LAUNCHER/>            &所述; /意图滤光器>        < /活性GT;        <活动机器人:球员的名字=机器人:标签=@字符串/播放>            &所述;意图滤光器>                <作用机器人:名字=android.intent.action.VIEW/>                <类机器人:名字=android.intent.category.DEFAULT/>                <类机器人:名字=android.intent.category.BROWSABLE/>                <数据机器人:计划=文件机器人:主机=*/>                <数据机器人:计划=HTTP机器人:主机=*/>                <数据机器人:计划=htt​​ps开头的android:主机=*/>                <数据机器人:pathPattern = />中* \\\\的汁液。                <数据机器人:pathPattern = />中* \\\\ CMC。                <数据机器人:pathPattern = />中* \\\\立方厘米。                <数据机器人:pathPattern = />中* \\\\ CMR。                <数据机器人:pathPattern = />中* \\\\厘米。                <数据机器人:pathPattern = />中* \\\\ DMC。                <数据机器人:pathPattern = />中* \\\\ DLT。                <数据机器人:pathPattern = />中* \\\\ MPT。                <数据机器人:pathPattern = />中* \\\\ MPD。                <数据机器人:pathPattern = />中* \\\\ RMT。                <数据机器人:pathPattern = />中* \\\\ TMC。                <数据机器人:pathPattern = />中* \\\\ TM8。                <数据机器人:pathPattern = />中* \\\\ TM2。            &所述; /意图滤光器>        < /活性GT;    < /用途>< /清单> 

残卷 Player.java

 开放的URI = getIntent()的getData();。InputStream为= getContentResolver()openInputStream(URI); 
围绕 快 字做文章 安卓版搜狗手机浏览器迎更新

当我在浏览器中输入URL时(Android 1.6的)我得到:

  E / AndroidRuntime(12026):了java.lang.RuntimeException:产生的原因java.io.FileNotFoundException:没有内容提供商:http://asap.sourceforge.net/X_Ray_2。树液E / AndroidRuntime(12026):在net.sf.asap.Player.onCreate(Player.java:109)E / AndroidRuntime(12026):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)E / AndroidRuntime(12026):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) 

解决方案

首先,下面是一个非常糟糕的主意:

 <数据机器人:计划=文件机器人:主机=*/>            <数据机器人:计划=HTTP机器人:主机=*/>            <数据机器人:计划=htt​​ps开头的android:主机=*/> 

如果你打断他们点击他们的设备上的任何地方让他们有处理与应用程序的链接选项,每一个环节你的用户会攻击你用镐。请删除这些行。

对于你的错误,你正试图打开一个Web URL( http://asap.sourceforge.net/X_Ray_2.sap )通过 getContentResolver()openInputStream()。不支持。 A ContentResolver的适用于Android的内容提供商。如果你想下载的东西在互联网上传播,也有对API,如HttpClient的。

How do I create an activity which supports certain file types clicked in the web browser?

Here's what I tried:

AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.sf.asap" android:versionCode="212" android:versionName="2.1.2">
    <application android:label="@string/app_name" android:icon="@drawable/icon">
        <activity android:name=".FileSelector" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Player" android:label="@string/playing">
            <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="file" android:host="*" />
                <data android:scheme="http" android:host="*" />
                <data android:scheme="https" android:host="*" />
                <data android:pathPattern=".*\\.sap" />
                <data android:pathPattern=".*\\.cmc" />
                <data android:pathPattern=".*\\.cm3" />
                <data android:pathPattern=".*\\.cmr" />
                <data android:pathPattern=".*\\.cms" />
                <data android:pathPattern=".*\\.dmc" />
                <data android:pathPattern=".*\\.dlt" />
                <data android:pathPattern=".*\\.mpt" />
                <data android:pathPattern=".*\\.mpd" />
                <data android:pathPattern=".*\\.rmt" />
                <data android:pathPattern=".*\\.tmc" />
                <data android:pathPattern=".*\\.tm8" />
                <data android:pathPattern=".*\\.tm2" />
            </intent-filter>
        </activity>
    </application>
</manifest> 

Fragment of Player.java:

Uri uri = getIntent().getData();
InputStream is = getContentResolver().openInputStream(uri);

When I enter an URL in the browser (Android 1.6) I get:

E/AndroidRuntime(12026): Caused by: java.lang.RuntimeException: java.io.FileNotFoundException: No content provider: http://asap.sourceforge.net/X_Ray_2.sap
E/AndroidRuntime(12026):    at net.sf.asap.Player.onCreate(Player.java:109)
E/AndroidRuntime(12026):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
E/AndroidRuntime(12026):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)

解决方案

First, the following is an exceptionally bad idea:

            <data android:scheme="file" android:host="*" />
            <data android:scheme="http" android:host="*" />
            <data android:scheme="https" android:host="*" />

Your users will attack you with pickaxes if you interrupt every link they click on anywhere on their device so they have the option of handling that link with your application. Please remove these lines.

With respect to your error, you are attempting to open a Web URL (http://asap.sourceforge.net/X_Ray_2.sap) via getContentResolver().openInputStream(). That is not supported. A ContentResolver works with Android content providers. If you wish to download something off of the Internet, there are APIs for that, such as HttpClient.