2012-04-14 10 views
7

Problem:Video-Upload auf Facebook in android

Mein Video wird nicht auf Facebook hochgeladen.

Frage:

Wie kann ich ein Video auf Facebook hochladen?

Hinweis:

ich ein Bild aus meiner Galerie hochladen.

Es wird kein Exceptions geworfen. Ich denke, es ist ein Problem in der Leitung

params.putString("filename", <selectedviedoPath>)

AsyncFacebookRunner mAsyncFbRunner = new AsyncFacebookRunner(mFacebook); 
     Bundle params = new Bundle(); 
     //convert to byte stream 
    **FileInputStream is = new FileInputStream(new File(selectedviedoPath));** 
    ByteArrayOutputStream bs = new ByteArrayOutputStream(); 
     int data = 0; 
     while((data = is.read()) != -1) 
     bs.write(data); 

     is.close(); 
     byte[] raw = bs.toByteArray(); 
     bs.close(); 

     params.putByteArray("video", raw); 
     params.putString("filename", <selectedviedoPath>); 
     mAsyncFbRunner.request("me/videos", params, "POST", new WallPostListener()); 
+1

Check out http://stackoverflow.com/q/6908413/664479 –

+1

@anoop: hast du oder nicht beantworten? Bitte akzeptieren Sie den richtigen. So kann es auch anderen helfen. –

Antwort

5

Unten ist was ich getan habe und funktioniert jetzt perfekt, um Video auf Facebook zu veröffentlichen.

FacebookVideoPostActivity.java

public class FacebookVideoPostActivity extends Activity { 
/** Called when the activity is first created. */ 

private static Facebook facebook = new Facebook("YOUR_APP_ID"); // App ID For the App 
private String permissions[] = {""}; 
private String statusString = ""; 
private Button btn1; 
private String PATH = "/sdcard/test1.3gp"; // Put Your Video Link Here 
private ProgressDialog mDialog ; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    btn1 = (Button) findViewById(R.id.button1); 
    mDialog = new ProgressDialog(FacebookVideoPostActivity.this); 
    mDialog.setMessage("Posting video..."); 

    btn1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      facebook.authorize(FacebookVideoPostActivity.this, new String[]{ "user_photos,publish_checkins,publish_actions,publish_stream"},new DialogListener() {      
       @Override      
       public void onComplete(Bundle values) { 
        postVideoonWall(); 

       }      
       @Override      
       public void onFacebookError(FacebookError error) {}      
       @Override      
       public void onError(DialogError e) {}      
       @Override      
       public void onCancel() {}     
      }); 

     } 
    }); 
} 

public void postVideoonWall() { 
    mDialog.setMessage("Posting ..."); 
    mDialog.show(); 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 

      byte[] data = null; 
      InputStream is = null; 
      String dataMsg = "This video is posted from bla bla bla App"; 
      Bundle param; 

      try { 
       is = new FileInputStream(PATH); 
       data = readBytes(is); 
       param = new Bundle(); 
       param.putString("message", dataMsg); 
       param.putString("filename", "test1.mp4"); 
       //param.putString("method", "video.upload"); 
       param.putByteArray("video", data); 
       AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); 
       mAsyncRunner.request("me/videos", param, "POST", new SampleUploadListener(), null); 
      } 
      catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 

} 


private Handler mPostHandler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     mDialog.dismiss(); 
     if(msg.what==0){ 
      Toast.makeText(getApplicationContext(), "Image Posted on Facebook.", Toast.LENGTH_SHORT).show(); 
     } 
     else if(msg.what==1) { 
      Toast.makeText(getApplicationContext(), "Responce error.", Toast.LENGTH_SHORT).show(); 
     }else if(msg.what==2){ 
      Toast.makeText(getApplicationContext(), "Facebook error.", Toast.LENGTH_SHORT).show(); 
     } 
    } 
}; 



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 array. 
    return byteBuffer.toByteArray(); 
} 

public class SampleUploadListener extends BaseRequestListener { 
    public void onComplete(final String response, final Object state) { 
     try {    
      Log.d("Facebook-Example", "Response: " + response.toString());    
      JSONObject json = Util.parseJson(response);    
      mPostHandler.sendEmptyMessage(0); 
      // then post the processed result back to the UI thread    
      // if we do not do this, an runtime exception will be generated    
      // e.g. "CalledFromWrongThreadException: Only the original    
      // thread that created a view hierarchy can touch its views."   
     } catch (JSONException e) {    
      mPostHandler.sendEmptyMessage(1); 
      Log.w("Facebook-Example", "JSON Error in response");   
     } catch (FacebookError e) { 
      mPostHandler.sendEmptyMessage(2); 
      Log.w("Facebook-Example", "Facebook Error: " + e.getMessage());   
     }  
    }  
    @Override  
    public void onFacebookError(FacebookError e, Object state) {   
     // TODO Auto-generated method stub  
    } 
} 

}

Jetzt Integrieren Facebook SDK in Ihrem Projekt und tun ändert sich wie folgt:

ändern Util.java von facebook sdk wie unten

public static String openUrl(String url, String method, Bundle params) 
      throws MalformedURLException, IOException { 
     // random string as boundary for multi-part http post 
     String strBoundary = "3i2ndDfv2rTHiSisAbouNdArYfORhtTPEefj3q2f"; 
     String endLine = "\r\n"; 

     OutputStream os; 



// ADDED By Shreyash For Publish Video 
// [email protected] 
// Mo. 919825056129 
     // Try to get filename key 
      String filename = params.getString("filename"); 
      // If found 
      if (filename != null) { 
       // Remove from params 
       params.remove("filename"); 
      } 
//=================================================== 


     if (method.equals("GET")) { 
      url = url + "?" + encodeUrl(params); 
     } 
     Util.logd("Facebook-Util", method + " URL: " + url); 
     HttpURLConnection conn = 
      (HttpURLConnection) new URL(url).openConnection(); 
     conn.setRequestProperty("User-Agent", System.getProperties(). 
       getProperty("http.agent") + " FacebookAndroidSDK"); 
     if (!method.equals("GET")) { 
      Bundle dataparams = new Bundle(); 
      for (String key : params.keySet()) { 
       Object parameter = params.get(key); 
       if (parameter instanceof byte[]) { 
        dataparams.putByteArray(key, (byte[])parameter); 
       } 
      } 

      // use method override 
      if (!params.containsKey("method")) { 
       params.putString("method", method); 
      } 

      if (params.containsKey("access_token")) { 
       String decoded_token = 
        URLDecoder.decode(params.getString("access_token")); 
       params.putString("access_token", decoded_token); 
      } 

      conn.setRequestMethod("POST"); 
      conn.setRequestProperty(
        "Content-Type", 
        "multipart/form-data;boundary="+strBoundary); 
      conn.setDoOutput(true); 
      conn.setDoInput(true); 
      conn.setRequestProperty("Connection", "Keep-Alive"); 
      conn.connect(); 
      os = new BufferedOutputStream(conn.getOutputStream()); 

      os.write(("--" + strBoundary +endLine).getBytes()); 
      os.write((encodePostBody(params, strBoundary)).getBytes()); 
      os.write((endLine + "--" + strBoundary + endLine).getBytes()); 

      if (!dataparams.isEmpty()) { 

       for (String key: dataparams.keySet()){ 
    // ADDED By Shreyash For Publish Video 
// [email protected] 
// Mo. 919825056129 
// os.write(("Content-Disposition: form-data; filename=\"" + key + "\"" + endLine).getBytes()); 
        os.write(("Content-Disposition: form-data; filename=\"" + ((filename) != null ? filename : key) + "\"" + endLine).getBytes()); 
        os.write(("Content-Type: content/unknown" + endLine + endLine).getBytes()); 
        os.write(dataparams.getByteArray(key)); 
        os.write((endLine + "--" + strBoundary + endLine).getBytes()); 

       } 
      } 
      os.flush(); 
     } 

     String response = ""; 
     try { 
      response = read(conn.getInputStream()); 
     } catch (FileNotFoundException e) { 
      // Error Stream contains JSON that we can parse to a FB error 
      response = read(conn.getErrorStream()); 
     } 
     return response; 
    } 

Setzen Sie über Funktion in diesem Util.Java und kommentieren Sie die gleiche Funktion darin.

Jetzt das Projekt ausführen. Wenn es irgendwelche Fragen gibt, lassen Sie es mich wissen.

Enjoy :)

+0

Haben Sie eine Lösung? –

+0

Ich kann nur 3gp Video hochladen ... können Sie mp4 oder andere hochladen? –

+0

@SanketKachhela: Hast du meinen Code in Antwort gesehen? Ich kann auch mp4-Videos hochladen. Es ist das Video im mp4-Format, dann wird es Zeit dauern, es hochzuladen, da es groß ist. Aber du wirst es trotzig in wenigen Minuten an die Wand posten. –