2011-04-01 21 views
0

我需要我的活動來處理從互聯網上下載的特定類型的文件。考慮到瀏覽器成功地調用了我的活動。我的活動獲取Intent對象。問題是如何閱讀下載的文件?活動處理特定的文件類型 - 如何讀取數據?

Intent.getData()根據我的理解將Uri返回到我的文件。 我應該如何使用HttpClient獲取文件內容?

How to read files clicked in the Android web browser?

但隨後犯規它在網絡上重新加載該文件,同時瀏覽器似乎已經加載的文件嗎?

回答

0

瀏覽器應用程序將向您發送本地文件的URI。所以不需要擔心任何與網絡相關的處理。

+0

不,它實際上發送Uri,從http開始。 – Zhenya 2011-04-05 11:03:54

+0

是的,URI可以指向一個文件,例如,file://sdcard/test.txt也是一個Uri。 – Karan 2011-04-05 11:19:37

0

我自己的問題的答案。

intent.getData()將Uri返回到遠程文件,而不是本地。所以據我瞭解,該文件並沒有保存在本地,但我的活動被調用。所以它是正確的,http客戶端必須被用來獲取內容。

這就是它是如何工作的:

HttpClient client = new DefaultHttpClient(); 
HttpGet request = new HttpGet(); 
String uri = getIntent().getData().toString(); 
request.setURI(URI.create(uri)); 
HttpResponse response = client.execute(request); 
InputStream is = response.getEntity().getContent(); 
0

從瀏覽器處理文件,我發現了兩種不同的方式,既可能是正確的:

1)

在清單的活動,創建一個意圖過濾器來處理已經下載的數據,保存在SD卡或其他地方:(這也將允許瀏覽器顯示您的數據類型的自定義圖標)

<intent-filter> 
<data android:scheme="file" /> 
... 
</intent-filter> 

然後,在活動:這個URI將是這樣的形式文件:// ...

@Override 
public void onStart() 
{ 
    super.onStart(); 
    Intent i = getIntent(); 
    URI d = i.getData(); 
    Log.d("myactivity.onStart","URI: " + d.toString()); 
    // Do something with the locally saved data 
} 

2)

在清單中的活動,創建一個意圖過濾器來處理網址。 (這也將允許瀏覽器啓動您的活動,而不是下載數據。)

<intent-filter> 
<data android:scheme="http" /> 
<data android:scheme="https" /> 
... 
</intent-filter> 

然後,在活動中,做同樣的事情,這一次的URL將是http:// ...

@Override 
public void onStart() 
{ 
    super.onStart(); 
    Intent i = getIntent(); 
    URI d = i.getData(); 
    Log.d("myactivity.onStart","URI: " + d.toString()); 
    // Do something with the url, like download the data using an AsyncTask 
} 
相關問題