添加新视频文件时如何获得通知
How to get notify when new video file is added
如何检测摄像头拍摄了新视频。我更新了我的代码
更新代码:
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>
等待您的专家建议。
更新:这个广播没有火
更新: 在模拟器和真实设备上测试。
您需要创建侦听相机目录中新文件的服务。
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();
}
}
在 <application>
标签内的 AndroidManifest.xml
中声明服务
<service
android:name=".service.MediaListenerService"
android:enabled="true"
android:exported="false" >
</service>
并且不要忘记添加权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
现在从您的 Activity 启动服务。
@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
的接收器,然后从那里启动服务。
希望对您有所帮助。
如何检测摄像头拍摄了新视频。我更新了我的代码
更新代码:
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>
等待您的专家建议。
更新:这个广播没有火
更新: 在模拟器和真实设备上测试。
您需要创建侦听相机目录中新文件的服务。
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();
}
}
在 <application>
标签内的 AndroidManifest.xml
中声明服务
<service
android:name=".service.MediaListenerService"
android:enabled="true"
android:exported="false" >
</service>
并且不要忘记添加权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
现在从您的 Activity 启动服务。
@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
的接收器,然后从那里启动服务。
希望对您有所帮助。