È ansible caricare i video da una SD Card a Facebook con l'SDK di Facebook?

Possiamo caricare i video da una SD Card di un dispositivo Android a un account Facebook tramite l'SDK di Facebook?

In caso affermativo, quali sono alcuni esempi semplici?

  • Errore: l'esecuzione non è rioutput per l'attività ': app: transformClassesWithDexForDebug'. > com.android.build.api.transform.TransformException: valore di output non zero. 3
  • android aidl importzione
  • Crea Overlay ImageView Animation Google Map
  • Rimuove / nasconde una preferenza dallo schermo
  • C'è un modo per fare ellipsize = "marquee" sempre scroll?
  • Allinea il button nella parte inferiore dello schermo
  • Come mostrare l'ombra di ActionBar & Toolbar della libreria di supporto in tutte le versioni Android?
  • PhoneGap (3.4.0) app android con sqlite, funziona bene in emulatore, ma non in dispositivo
  • tirare per aggiornare e caricare più listview come facebook
  • Dovremmo utilizzare classi anonime per OnClickListeners o classi interne denominate?
  • Distriggers l'evidenziazione arancione nei collegamenti in Android
  • geo tagging in android
  • 4 Solutions collect form web for “È ansible caricare i video da una SD Card a Facebook con l'SDK di Facebook?”

    Sì, è ansible! Dopo due giorni di tentativi e ricerche, sono stato in grado di farlo. Ecco il codice:

    byte[] data = null; String dataPath = "/mnt/sdcard/KaraokeVideos/myvideo.3gp"; String dataMsg = "Your video description here."; Bundle param; facebook = new Facebook(FB_APP_ID); AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); InputStream is = null; try { is = new FileInputStream(dataPath); data = readBytes(is); param = new Bundle(); param.putString("message", dataMsg); param.putString("filename", dataName); param.putByteArray("video", data); mAsyncRunner.request("me/videos", param, "POST", new fbRequestListener(), null); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } 

    where fbRequestListener() è un'implementazione di AsyncFacebookRunner.RequestListener() e readBytes() è una function di conversione del file video in byte[] . La string dataName dovrebbe includere un'estensione di file valida (3gp, mp4, ecc.). Il codice è il seguente:

     public byte[] readBytes(InputStream inputStream) throws IOException { // This dynamically extends to take the bytes you read. ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); // This is storage overwritten on each iteration with bytes. int bufferSize = 1024; byte[] buffer = new byte[bufferSize]; // We need to know how may bytes were read to write them to the byteBuffer. int len = 0; while ((len = inputStream.read(buffer)) != -1) { byteBuffer.write(buffer, 0, len); } // And then we can return your byte arrays. return byteBuffer.toByteArray(); } 

    Ho ottenuto questa function da questa risposta .

    Naturalmente, è necessario disporre dell'ultimo SDK di Facebook, ma occorre applicare questa patch per correggere l' {"error":{"type":"OAuthException","message":"(#352) Video file format is not supported"}} errore di risposta string.

    E questo è tutto! Spero che aiuti!

    Con il rilascio di nuovi facebook SDK 3.5, il caricamento video è stato reso più facile. Se stai utilizzando sdk 3.5 o superiore qui è il codice per caricare video in facebook

     //Path to the video, Ex: path = Environment.getExternalStorageDirectory() + File.separator + "myVideo.mp4"; String path; //get the current active facebook session Session session = Session.getActiveSession(); //If the session is open if(session.isOpened()) { //Get the list of permissions associated with the session List<String> permissions = session.getPermissions(); //if the session does not have video_upload permission if(!permissions.contains("video_upload")) { //Get the permission from user to upload the video to facebook Session.NewPermissionsRequest newPermissionsRequest = new Session .NewPermissionsRequest(this, Arrays.asList("video_upload")); session.requestNewReadPermissions(newPermissionsRequest); } //Create a new file for the video File file = new File(path); try { //create a new request to upload video to the facebook Request videoRequest = Request.newUploadVideoRequest(session, file, new Request.Callback() { @Override public void onCompleted(Response response) { if(response.getError()==null) { Toast.makeText(MainActivity.this, "video shared successfully", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, response.getError().getErrorMessage(), Toast.LENGTH_SHORT).show(); } } }); //Execute the request in a separate thread videoRequest.executeAsync(); } catch (FileNotFoundException e) { e.printStackTrace(); } } //Session is not open else { Toast.makeText(getApplicationContext(), "Please login to facebook first", Toast.LENGTH_SHORT).show(); } 

    Dopo aver patchato il file Util, non è stato ansible get il risultato.

    Mi sono affrontato il problema menzionato da softy.

    Ho provato con questo in android … Ora funziona con successo .. video visualizzato sul mio muro dopo qualche tempo (entro 1 minuto) .. (potrebbe essere, facebook era dati aggiornanti ..)

     String path="\mnt\sdcard\test.mp4"; if (new File(path).exists()) { try { byte[] data = null; String dataPath = new File(path).getAbsolutePath(); Log.e("", dataPath); String dataMsg = "It is the short movie created"; Bundle param; InputStream is = null; try { is = new FileInputStream(dataPath); data = readBytes(is); param = new Bundle(); // param.putString("filename", "" + new // File(path).getName()); // param.putString("mimeType", "video/mp4"); param.putString("message", dataMsg); param.putString("title", "title"); param.putString("contentType", "video/quicktime"); param.putByteArray("video.mov", data); Utility.mAsyncRunner.request("me/videos", param, "POST", new FBRequestListener(), null); Toast.makeText(getContext(), "Uploading...", Toast.LENGTH_SHORT).show(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } } else { Toast.makeText(getContext(), "No videos found in these dates", Toast.LENGTH_SHORT).show(); } 

    FBRequestListener.java

     public class FBRequestListener implements RequestListener { @Override public void onComplete(String response, Object state) { Log.e("response", response); // Log.e("state", state.toString()); } @Override public void onIOException(IOException e, Object state) { Log.e("", "onIOException"); e.printStackTrace(); } @Override public void onFileNotFoundException(FileNotFoundException e, Object state) { Log.e("", "onFileNotFoundException"); e.printStackTrace(); } @Override public void onMalformsdURLException(MalformsdURLException e, Object state) { Log.e("", "onMalformsdURLException"); e.printStackTrace(); } @Override public void onFacebookError(FacebookError e, Object state) { Log.e("", "onFacebookError"); e.printStackTrace(); } } 

    Nel rilascio di un nuovo SDK di facebook, ci sono alcune modifiche nel caricamento video alla pagina o alla panetworking di facebook.

    Ecco il codice che ho usato per caricare video su una pagina Facebook o un muro di facebook.

    Il metodo onActivityResult() dovrebbe essere simile a questo

     @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == CAMERA_VIDEO && resultCode == Activity.RESULT_OK){ String selectedVideoFilePath = GetFilePathFromDevice.getPath(this, data.getData()); final byte[] datas = readBytes(selectedVideoFilePath); PostVideo(datas, selectedVideoFilePath); } } 

    Ecco tutto il metodo usato in onActivityResult().

     public byte[] readBytes(String dataPath) throws IOException { InputStream inputStream = new FileInputStream(dataPath); ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) != -1) { byteBuffer.write(buffer, 0, len); } return byteBuffer.toByteArray(); } public void PostVideo(byte[] VideoBytes, String filePath) { String url; url = "/me/videos"; AccessToken token = AccessToken.getCurrentAccessToken(); if (token != null) { Bundle param = new Bundle(); param.putByteArray("video." + getFileExt(filePath), VideoBytes); param.putString("description", "sample video"); new GraphRequest(token,url, param, HttpMethod.POST, new GraphRequest.Callback() { public void onCompleted(GraphResponse response) { Log.e("New Post", "Res =" + response.toString()); dialog.dismiss(); if (response != null && response.getJSONObject() != null && response.getJSONObject().has("id")) { Log.e("New Post", "Success"); Toast.makeText(NewPostActivity.this, "Video posted successfully.", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(NewPostActivity.this, "Error in posting Video.", Toast.LENGTH_SHORT).show(); } setResult(Activity.RESULT_OK, new Intent()); finish(); } }).executeAsync(); } } public static String getFileExt(String fileName) { return fileName.substring((fileName.lastIndexOf(".") + 1), fileName.length()); } 

    Ecco la class GetFilePathFromDevice utilizzata in onActivityResult() per get il path di file da URI.

     @SuppressLint("NewApi") public final class GetFilePathFromDevice { /** * Get file path from URI * * @param context context of Activity * @param uri uri of file * @return path of given URI */ public static String getPath(final Context context, final Uri uri) { final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; // DocumentProvider if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { // ExternalStorageProvider if (isExternalStorageDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final String type = split[0]; if ("primary".equalsIgnoreCase(type)) { return Environment.getExternalStorageDirectory() + "/" + split[1]; } } // DownloadsProvider else if (isDownloadsDocument(uri)) { final String id = DocumentsContract.getDocumentId(uri); final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); return getDataColumn(context, contentUri, null, null); } // MediaProvider else if (isMediaDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final String type = split[0]; Uri contentUri = null; if ("image".equals(type)) { contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; } else if ("video".equals(type)) { contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; } else if ("audio".equals(type)) { contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; } final String selection = "_id=?"; final String[] selectionArgs = new String[]{split[1]}; return getDataColumn(context, contentUri, selection, selectionArgs); } } // MediaStore (and general) else if ("content".equalsIgnoreCase(uri.getScheme())) { // Return the remote address if (isGooglePhotosUri(uri)) return uri.getLastPathSegment(); return getDataColumn(context, uri, null, null); } // File else if ("file".equalsIgnoreCase(uri.getScheme())) { return uri.getPath(); } return null; } public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) { Cursor cursor = null; final String column = "_data"; final String[] projection = {column}; try { cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null); if (cursor != null && cursor.moveToFirst()) { final int index = cursor.getColumnIndexOrThrow(column); return cursor.getString(index); } } finally { if (cursor != null) cursor.close(); } return null; } public static boolean isExternalStorageDocument(Uri uri) { return "com.android.externalstorage.documents".equals(uri.getAuthority()); } public static boolean isDownloadsDocument(Uri uri) { return "com.android.providers.downloads.documents".equals(uri.getAuthority()); } public static boolean isMediaDocument(Uri uri) { return "com.android.providers.media.documents".equals(uri.getAuthority()); } public static boolean isGooglePhotosUri(Uri uri) { return "com.google.android.apps.photos.content".equals(uri.getAuthority()); } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.