Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android – Cómo subir fotos de la tarjeta SD a la pared de Facebook

Utilizo el SDK de Android de Facebook.

Gol

Cree varias entradas en el feed de noticias de Facebook con el usuario registrado que contendrá la foto del dispositivo Android (su tarjeta SD ) y algún comentario. El resultado debe ser el mismo que cuando lo haces usando la función Añadir foto / video directamente en Facebook. Al final, debería verse así:

Se busca el resultado de Facebook

Gol

Problema

No puedo hacerlo.

Fui a través de los numerosos puestos similares en desbordamiento de pila, pero no hay respuesta hasta ahora.

Lo que he intentado implementar hasta ahora

Enfoque 1: Fotos de la tarjeta SD 2 Álbum de Facebook

Cómo

Sube fotos de mi móvil (su tarjeta SD) a un álbum que se crea para mi aplicación la primera vez que subo una foto de ella. En este caso, al construir el objeto params, utilizo la clave de picture y pongo los bytes de la imagen como su valor. Me utilizo me/photos en la llamada de request(...) del objeto de Facebook (o AsyncFacebookRunner). **

El problema

No todas las imágenes subidas se muestran en mi pared. En cambio, hay algo como x fotos se agregaron al álbum xxx .

El fragmento de código es éste (para una imagen)

 Bundle params = new Bundle(); params.putString("message", "Uploaded on " + now()); params.putByteArray("picture", bytes); //bytes contains photo bytes, no problem here asyncRunner.request("me/photos", params, "POST", new PostPhotoRequestListener(), null); 

Resultado de Facebook

Fotos en el álbum

Enfoque 2: fotos de Internet 2 noticias de Facebook

Cómo

Mostrar imágenes almacenadas en algún lugar de Internet en publicaciones en mi pared. En este caso, al construir el objeto params, utilizo la clave de link y establezco la url a picture como su valor. Me utilizo me/feed en la llamada de la request(...) .

El problema

Esto produce una salida extraña, pero no es lo que quiero.

El fragmento de código es éste (para una imagen)

 Bundle params = new Bundle(); params.putString("message", "Uploaded on " + now()); params.putString("link", "http://i1114.photobucket.com/albums/k538/tom_rada/bota2.jpg"); asyncRunner.request("me/feed", params, "POST", new PostPhotoRequestListener(), null); 

Resultado de Facebook

Fotos relacionadas

Enfoque 3: Mezcla de aproximación 1 y 2

Cómo

Intento utilizar la clave de picture y establecer bytes de foto como su valor (como en 1.), y llamar a la solicitud con me/feed (como en 2.),

El problema

Mensaje se produce como me gustaría que fuera, pero no se incluye ninguna foto

El fragmento de código es éste (para una imagen)

 Bundle params = new Bundle(); params.putString("message", "Uploaded on " + now()); params.putByteArray("picture", bytes); //bytes contains photo bytes, no problem here asyncRunner.request("me/feed", params, "POST", new PostPhotoRequestListener(), null); 

Resultado de Facebook

Casi allí

Entonces, ¿alguna idea de cómo podría alcanzar mi meta?

EDITAR – TRABAJO ENCONTRADO

Parece que la única manera de crear nuevos mensajes que contengan fotos en la pared del usuario es agregar fotos y comentarios relacionados al álbum de fotos de Wall del usuario.

Cómo – Snippet de código

Tenga cuidado: la llamada de facebook.request debe ser reemplazada por llamada asíncrona, por lo que la operación no bloquea el subproceso de interfaz de usuario.

 String wallAlbumID = null; String response = facebook.request("me/albums"); JSONObject json = Util.parseJson(response); JSONArray albums = json.getJSONArray("data"); for (int i =0; i < albums.length(); i++) { JSONObject album = albums.getJSONObject(i); if (album.getString("type").equalsIgnoreCase("wall")) { wallAlbumID = album.getString("id"); Log.d("JSON", wallAlbumID); break; } } 

… y entonces

 if (wallAlbumID != null) { Bundle params = new Bundle(); params.putString("message", "Uploaded on " + now()); params.putByteArray("source", bytes); asyncRunner.request(wallAlbumID+"/photos", params, "POST", new PostPhotoRequestListener(), null); } 

  • Manipulación de imágenes JPEG progresivas en Libgdx
  • Cerrar sesión en Facebook con android fb SDK 3.0
  • Cómo llamar a publishInstall () en facebook graph api android
  • Cómo enviar solicitudes de aplicaciones a amigos a través de Facebook Android SDK
  • Cómo obtener la imagen de perfil de Facebook en Android
  • ¿Cómo puedo usar la API de conexión de Facebook de mobileweb con el teléfono?
  • UnknownError: ApiException: El hash de claves **** no coincide ... cuando tengo la aplicación FB instalada
  • ¡Desajuste del tarro! Corregir sus dependencias para el FacebookSDK
  • 4 Solutions collect form web for “Android – Cómo subir fotos de la tarjeta SD a la pared de Facebook”

     Facebook facebook = new Facebook("your appid"); private void uploadImage() { Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); final byte[] data = stream.toByteArray(); facebook.authorize(FacebookActivity.this, new String[]{ "user_photos,publish_checkins,publish_actions,publish_stream"},new DialogListener() { @Override public void onComplete(Bundle values) { //uploadImageOnlyToWall(data, "Uploading Image only to wall","Test Post from Android while uploading photo with message"); uploadImageToWallAndAlbums(imageUrl, "Image via link"); } @Override public void onFacebookError(FacebookError error) { Toast.makeText(FacebookActivity.this, "FaceBook Error", Toast.LENGTH_LONG).show(); } @Override public void onError(DialogError e) { Toast.makeText(FacebookActivity.this, "Error", Toast.LENGTH_LONG).show(); } @Override public void onCancel() { Toast.makeText(FacebookActivity.this, "Canceled", Toast.LENGTH_LONG).show(); } }); } private void uploadImageOnlyToAlbum(byte[] byteArray,String caption) { Bundle params = new Bundle(); params.putByteArray("picture", byteArray); params.putString("caption",caption); AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); mAsyncRunner.request("me/photos", params, "POST", new SampleUploadListener(), null); } private void uploadImageToWallAndAlbums(byte[] byteArray,String caption) { Bundle params = new Bundle(); params.putString("method", "photos.upload"); params.putByteArray("picture", byteArray); params.putString("caption", caption); AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), null); } 

    Si el usuario no ha publicado previamente una foto en su pared (no hay álbum de fotos en la pared), puede usar la solicitud de me/photo para publicar una foto primero. Esto creará automáticamente un álbum de pared.

      Facebook facebook = new Facebook("your App_id"); private void uploadImage() { Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); final byte[] data = stream.toByteArray(); facebook.authorize(FacebookActivity.this, new String[]{ "user_photos,publish_checkins,publish_actions,publish_stream"},new DialogListener() { @Override public void onComplete(Bundle values) { //uploadImageOnlyToWall(data, "Uploading Image only to wall","Test Post from Android while uploading photo with message"); uploadImageToWallAndAlbums(imageUrl, "Image via link"); } @Override public void onFacebookError(FacebookError error) { Toast.makeText(FacebookActivity.this, " Error", Toast.LENGTH_LONG).show(); } @Override public void onError(DialogError e) { Toast.makeText(FacebookActivity.this, "Error", Toast.LENGTH_LONG).show(); } @Override public void onCancel() { Toast.makeText(FacebookActivity.this, "Canceled", Toast.LENGTH_LONG).show(); } }); } private void uploadImageOnlyToAlbum(byte[] byteArray,String caption) { Bundle params = new Bundle(); params.putByteArray("picture", byteArray); params.putString("caption",caption); AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); mAsyncRunner.request("me/photos", params, "POST", new SampleUploadListener(), null); } private void uploadImageToWallAndAlbums(byte[] byteArray,String caption) { Bundle params = new Bundle(); params.putString("method", "photos.upload"); params.putByteArray("picture", byteArray); params.putString("caption", caption); AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), null); } 

    Agregue esta clase en su código

     public class SampleUploadListener implements RequestListener{ @Override public void onMalformedURLException(MalformedURLException e, Object state) { Log.d(TAG, "******************* FACEBOOK::onMalformedURLException *******************"); } @Override public void onIOException(IOException e, Object state) { Log.d(TAG, "******************* FACEBOOK::onIOException *******************"); } @Override public void onFileNotFoundException(FileNotFoundException e, Object state) { Log.d(TAG, "******************* FACEBOOK::onFileNotFoundException *******************"); } @Override public void onFacebookError(FacebookError e, Object state) { Log.d(TAG, "******************* FACEBOOK::onFacebookError *******************"); } @Override public void onComplete(String response, Object state) { Log.d(TAG, "******************* FACEBOOK::onComplete *******************"); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.