2013-07-07 146 views
2

我希望能夠運行在通常的方法標準的Android瀏覽器,瀏覽到一個頁面的鏈接就可以了文件,如打開文件鏈接

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

點擊鏈接並讓它啓動我的應用程序,然後根據需要處理該文件。

的網頁基本工程確定 - 點擊從Firefox在PC上的鏈接,並如預期,我得到的選項來保存文件,或與已註冊的應用程序的.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)。

+0

這應該是有幫助的:http://richardleggett.co.uk/blog/2013/01/26/registering_for_file_types_in_android/ –

+0

是的,謝謝,閱讀它。想想我已經嘗試了幾乎所有的東西。 – nmw01223

+0

有趣的是,我剛剛注意到,即使我的應用程序卸載,並在它的PDF網頁(...,點擊PDF鏈接上沒有做任何事情無論是。我敢肯定,用...我已嘗試重置所有瀏覽器設置。 – nmw01223

回答

2

對其進行排序。首先從其他帖子看來,在同一個窗口中通常存在從android瀏覽器打開鏈接的問題。因此加入目標= _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)目標的效果= _blank是讓Android的瀏覽器 不斷打開新的窗口,每次下載完成 - 而且是有一定限度如何很多它會打開。