2

通常の方法で標準の Android ブラウザーを実行できるようにしたい、ファイルへのリンクがあるページに移動します。

<a href=./myfile.gcsb>click here</a>

リンクをクリックしてアプリを起動すると、必要に応じてファイルを処理できます。

Web ページは基本的に問題なく動作します。PC 上の Firefox からリンクをクリックすると、予想どおり、ファイルを保存するか、.gcsb ファイル タイプ用の登録済みアプリで開くかのオプションが表示されます。しかし、Androidデバイスではありません。

ただし、考えられる限り、アプリでインテントフィルターのすべてのバージョンを試しました。

<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 を実行)。

4

1 に答える 1

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

これはすべて機能しているように見えますが、2 つの条件があります: (1) これはすべて実際にはバックグラウンド スレッドで実行する必要があります。(2) target=_blank の効果は、ダウンロードが完了するたびに Android ブラウザが新しいウィンドウを開き続けるようにすることです。 -そして、開く数には制限があります。

于 2013-07-07T09:34:16.260 に答える