1

Как определить, что камера захватила новое видео. Я обновил мой кодКак получить уведомление при добавлении нового видеофайла

Изменено Код:

public class Video extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     // TODO Auto-generated method stub 

     Log.d("SCAN_FILE", "VIDEOOOOOOOOOOOOOOOOOOO"); 

     String action = intent.getAction(); 

     Uri uri = intent.getData(); 

     String externalStoragePath = Environment.getExternalStorageDirectory().getPath(); 

     if (uri.getScheme().equals("file")) 
     { 
      String path = uri.getPath(); 

      if (action.equals(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE) && 
        path != null && path.startsWith(externalStoragePath + "/")) 
      { 
       String newFileURL = intent.getDataString(); 

       scanFile(context, path, newFileURL); 
      } 
     } 
    } 

    private void scanFile(Context context, String path, String URL) 
    { 
     Log.d("SCAN_FILE", path); 

     Log.d("SCAN_URL", URL); 
    }      
} 

манифеста:

<receiver android:name=".Video" > 
      <intent-filter> 
       <action android:name="android.intent.action.MEDIA_SCANNER_SCAN_FILE" /> 
      </intent-filter> 
     </receiver> 

Жду ваших советов экспертов.

обновление: Эта трансляция не добывания огня

ответ

2

Обновлено: Испытано на обоих эмулятора и реального устройства.

Вам необходимо создать службу, которая прослушивает новый файл в каталоге камеры.

MediaListenerService.java

import android.app.Service; 
import android.content.Intent; 
import android.os.FileObserver; 
import android.os.Handler; 
import android.os.IBinder; 
import android.os.Looper; 
import android.util.Log; 
import android.widget.Toast; 
import java.io.File; 

public class MediaListenerService extends Service { 

    public static FileObserver observer; 

    public MediaListenerService() { 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     startWatching(); 
    } 

    private void startWatching() { 
     final String pathToWatch = android.os.Environment.getExternalStorageDirectory().toString() + "/DCIM/Camera/"; 
     Toast.makeText(this, "My Service Started and trying to watch " + pathToWatch, Toast.LENGTH_LONG).show(); 

     observer = new FileObserver(pathToWatch, FileObserver.CLOSE_WRITE) { // set up a file observer to watch this directory on sd card 
      @Override 
      public void onEvent(int event, final String file) { 
       if (!file.equals(".probe")) { // check that it's not equal to .probe because thats created every time camera is launched 
        Log.d("MediaListenerService", "File created [" + pathToWatch + file + "]"); 

        new Handler(Looper.getMainLooper()).post(new Runnable() { 
         @Override 
         public void run() { 
          Toast.makeText(getBaseContext(), file + " was saved!", Toast.LENGTH_LONG).show(); 
         } 
        }); 
       } 
      } 
     }; 
     observer.startWatching(); 
    } 
} 

Объявить службу в AndroidManifest.xml внутри <application> тега

<service 
    android:name=".service.MediaListenerService" 
    android:enabled="true" 
    android:exported="false" > 
</service> 

А также не забудьте добавить разрешение:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

сейчас начать службу е из вашей деятельности.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    startService(new Intent(getBaseContext(), MediaListenerService.class)); 
} 

Если вы хотите, чтобы ваш сервис начал при загрузке, просто создать приемник, слушать android.intent.action.BOOT_COMPLETED, а затем запустить службу от этого.

Надеюсь, это поможет.

+0

Спасибо за ваш ответ, я дам ему попробовать – Creator

+0

plz проверить мой обновленный вопрос – Creator

+0

О, хорошо. Я был неправ. Просто проверил API и обнаружил, что прослушивание трансляции MEDIA_SCANNER_SCAN_FILE невозможно прослушать. Найден другой путь и обновит свой ответ, как только найду его. – nuuneoi

Смежные вопросы