2016-12-03 18 views
0

我的應用程序背後的概念可能沒有意義,但我只是需要它來演示一些東西。
我想要做的是:從庫中導入視頻,然後將其保存到另一個文件夾中

1 - 從Android圖庫導入視頻
2 - 將其重命名(XYZ爲例)
3 - 保存不同的文件夾下(ABC)

完整路徑將是,例如:

"/storage/emulated/0/Pictures/ABC/XYZ.mp4" 

我設法打電話的意圖來顯示的畫廊,我會挑預期視頻,但我不知道我應該怎麼寫在onActivityResult?

gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View v, 
          int position, long id) { 

      Intent intent = new Intent(); 
       intent.setType("video/*"); 
       intent.setAction(Intent.ACTION_GET_CONTENT); 
       startActivityForResult(Intent.createChooser(intent,"Select Video"),TAKE_Video); 
     } 
    } 

添加此代碼以下@CommonsWare步驟,但沒有任何反應:(

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (resultCode == RESULT_OK) { 
     if (requestCode == TAKE_Video) { 

      File root = new File(Environment.getExternalStorageDirectory(), "/Pictures/Targets/"); ///storage/emulated/0/Directory Name 
      if (!root.exists()) { 
       root.mkdirs(); 
      } 
      try { 

       FileInputStream fis = (FileInputStream) getContentResolver().openInputStream(data.getData()); 

       File file; 
       String newname="newname.mp4"; 
       file = new File(root,newname); 
       FileOutputStream fos = new FileOutputStream(file); 
       byte[] buf = new byte[1024]; 
       int len; 
       while ((len = fis.read(buf)) > 0) { 
        fos.write(buf, 0, len); 

       } 

       fos.flush(); 
       fos.getFD().sync(); 
       fos.close(); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
+1

「我設法調用意圖顯示畫廊,我將選擇預期的視頻」 - 請編輯您的問題並提供[mcve],展示您正在爲此做什麼,因爲這將有助於引導如何使用結果。 – CommonsWare

+0

對不起,我添加了意向代碼 – NuhaAbd

回答

1

步驟#1:在onActivityResult(),檢查請求代碼(第一參數),看看它是否是RESULT_LOAD_Video,和檢查結果代碼(第二個參數),看它是否是RESULT_OK

第2步:當從步驟#1是真實的兩張支票,創造您想要的目標文件FileOutputStream,用新的名稱

步驟#3:致電getContentResolver().openInputStream(),傳入的值爲getData(),呼叫Intent傳入onActivityResult()(第三參數)。

步驟4:使用Java I/O從步驟#3中獲得的InputStream中讀取字節,並將它們寫入步驟#2中獲得的FileOutputStream

步驟#5:當您完成複製字節時,分別在FileOutputStream上撥打flush(),getFD().sync()close()

步驟#6:當您完成所有工作時,將步驟#2-5的代碼移動到後臺線程,因爲您不應在主應用程序線程上執行此類I/O。

+0

非常感謝您的詳細解答。我正在努力與第四步如何完成它?對不起,我是這個 – NuhaAbd

+0

的新手我按照你提到的步驟添加了代碼,但沒有任何反應..你可以檢查我做錯了什麼? – NuhaAbd

+0

@NuhaAbd:您正在調用'startActivityForResult()'並傳入'RESULT_LOAD_Video'。你正在'onActivityResult()'中檢查'TAKE_Video'。這些不是相同的符號,也許不會解析爲相同的「int」值。 – CommonsWare

相關問題