2011-12-02 90 views
2

我正在開發一款應用程序,我需要能夠將照片上傳到Picasa打開的相冊。 我經歷了很多線程,論壇......嘗試了一些使用http post的方法,但似乎沒有任何工作。從android應用上傳到picasa

以前有人做過嗎?如果是的話,你可以分享一個示例代碼。我只需要從picasa進行基本上傳和下載照片。

+0

難道不是的這個一樣http://stackoverflow.com/questions/2193700/picasa-access- in-android-picasauploadactivity? – Ifor

+0

它有點相同...但它不工作..。 – ash

回答

1

下面的問題看起來涵蓋了一些。 Picasa access in android: PicasaUploadActivity 此主題還有信息。 http://www.mail-archive.com/[email protected]/msg43707.html

它看起來很直接,以消除意圖使用標準的Picasa上傳。今天晚些時候我會試着把它放入我的應用程序中,因爲我想要這個功能。

做它自己看起來是可能的,但顯然更復雜的文檔看起來是http://code.google.com/apis/picasaweb/docs/2.0/developers_guide_protocol.html

確定我有它在我的應用程序下面的代碼工作。這帶來了picasa上傳。

Intent temp = new Intent(Intent.ACTION_SEND); 
temp.setType("image/png"); 
temp.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
temp.putExtra(Intent.EXTRA_STREAM, fileUri); 
temp.setComponent(new ComponentName(
    "com.google.android.apps.uploader", 
    "com.google.android.apps.uploader.clients.picasa.PicasaSettingsActivity")); 
try { 
    startActivity(temp); 
} catch (android.content.ActivityNotFoundException ex) { 
    Log.v(TAG, "Picasa failed"); 
} 

在實踐中,我將採取設置組件位出讓讓用戶選擇哪裏以及如何發送這是我想要的。

+0

我已經嘗試了上面的代碼,但它說沒有找到活動.. – ash

+0

我也猜測它會打開Picasa上傳到與手機同步的帳戶之一...但我需要上傳到公共相冊... – ash

+0

oops ...沒有錯誤..它打開了picasa上傳選項..但仍然需要上傳到公開相冊... – ash

1

上述答案適用於現已棄用的Picasa API v2。我無法成功使用Java API for Picasa API v3,但我想出了一種使用http post將圖像上傳到Picasa的方法。我寫這個方法here

File image = new File("/path/to/image.jpg"); 
byte[] imageContent = null; 
try { 
    imageContent = Files.toByteArray(image); 
} catch (Exception e) { 
    // do something 
} 

HttpClient httpClient = HttpClientBuilder.create().build(); 
HttpPost httpPost = new HttpPost("https://picasaweb.google.com/data/feed/api/user/default/albumid/default"); 
httpPost.addHeader("Authorization", "Bearer " + mAccessToken); 
httpPost.addHeader("Content-Type", "image/jpeg"); 
httpPost.setEntity(new ByteArrayEntity(imageContent)); 

try { 
    HttpResponse httpResponse = httpClient.execute(httpPost); 
    // log the response 
    logd(EntityUtils.toString(httpResponse.getEntity())); 
} catch (IOException e){ 
    // do something 
} 

此方法使用Apache的HttpClient的。如果您的Android版本不支持它,你仍然可以在您的搖籃文件這一行編譯:

compile 'cz.msebera.android:httpclient:4.4.1.1' 
+0

鏈接作爲答案是最好的評論沒有答案。我建議編輯上面的答案,以便在一個地方添加主要部分。該鏈接不包含那麼多的代碼。 – Syfer

+0

@Syfer我爲我的懶惰道歉,謝謝你的提示,答案已經更新。 –