2015-12-03 3 views
2

Я читал столько, сколько могу здесь по этой теме, и я просканировал документацию (AWS 2.2.9), и я использую их примерный код так близко, как я могу, и я «Застрял. Вот что я сделал для установки:Android Amazon S3 Загрузить видео застрял в ожидании

манифеста -

соответствующих разрешений - "android.permission.INTERNET" и "android.permission.ACCESS_NETWORK_STATE"

сервиса -

андроид: name = "com.amazonaws.mobileconnectors.s3.transferutility.TransferService" android: enabled = "true"

У меня есть мой ковш, а также учетные данные для Cognito. Вот код, я добавил для этого загрузку:

File f = getVideoFile(activity); 

...

TransferObserver observer = sTransferUtility.upload(Constants.BUCKET_NAME, f.getName(), f); 

    observer.setTransferListener(new TransferListener() { 
     @Override 
     public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) { 
      Log.e("Transfer", "Percent Complete = " + bytesCurrent/bytesTotal * 100); 
     } 

     @Override 
     public void onStateChanged(int id, TransferState state) { 
      Log.e("Transfer", "onStateChanged"); 
      Log.e("Transfer", "state = " + state); 
     } 

     @Override 
     public void onError(int id, Exception ex) { 
      Log.e("Transfer", "Error = " + ex.getMessage()); 
     } 
    }); 

Я временно добавил цикл ожидания после того, как увидеть, если я просто быть нетерпеливым, но он просто показывает состояние = ЖДАТЬ, пока я не убить приложение:

TransferState state = observer.getState(); 
    while (state != TransferState.COMPLETED) { 
     Log.e("Transfer", "state = " + state); 
     try { 
      Thread.sleep(10000); 
      state = observer.getState(); 
     } catch (Exception e) { 
      Log.e("Transfer", "exception " + e.getMessage()); 
     } 
    } 

Все это происходит внутри фрагмента. Я не вижу сообщений об ошибках (я понимаю, что другие заметили, что отсутствующая конфигурация может привести к такому поведению, но я думаю, что сделал все, что я должен делать, здесь).

Буду признателен, если услышу о чем-либо, что у меня есть, или вам нужно будет получить дополнительную информацию.

Edit:

Я не подозревает, что вся проблема не с кодом, а с конфигурацией, которую я получил.

Мой Cognito и ведро Id выглядеть следующим образом (но не точно они):

COGNITO_POOL_ID: "мы-восток-1: ABCDEFGH-ABCDEFGH-IJKL-mnopqrstuvwxy" BUCKET_NAME: «MyBucket "

Мне также интересно узнать, должен ли ключ быть именем файла в моей .upload() должен включать в себя путь или просто имя файла. Я пробовал оба, но какой из них будет правильно:

/storage/emulated/0/Android/data/com.blah.blah/files/video.mp4

или

видео. mp4

До сих пор?

Спасибо.

-var

+0

Вы звоните обновления на TransferObserver? В каком состоянии это сообщение застревает? – WestonE

+0

WestonE, я добавил обновление. Состояние отчетности задерживается на «ОЖИДАНИИ». – VAR

+0

Это еще проблема? Вы называете это фоновым потоком? Что делать, если вы делаете вызов за пределами фрагмента? Вы уверены, что файл существует? Можете ли вы скачать файл? Также видео.mp4 должно быть в порядке. – WestonE

ответ

0

Я делал загрузку внутри класса AsyncTask, и состояние никогда не менялось, продолжайте WATING. После переключения код внутри операции действует правильно. Итак, попробуйте перевести TransferObserver observer = transferUtility.upload() в свою активность.

1

Поместите это внутри тега приложения в AndroidManifest.xml

<service android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService" 
android:enabled="true" /> 
Смежные вопросы