【问题标题】:How to get notify when new video file is added添加新视频文件时如何获得通知
【发布时间】:2015-03-12 05:21:47
【问题描述】:

如何检测该相机已拍摄新视频。我已经更新了我的代码

更新代码:

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>

等待您的专家建议。

更新:这个广播没有火

【问题讨论】:

    标签: java android broadcastreceiver contentobserver fileobserver


    【解决方案1】:

    更新:在模拟器和真实设备上测试。

    您需要创建监听Camera目录中新文件的服务。

    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();
        }
    }
    

    &lt;application&gt;标签内的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,然后从中启动服务。

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回复,我会试试看
    • 哦,好的。我错了。刚查了API,发现MEDIA_SCANNER_SCAN_FILE广播intent无法监听。将找到另一种方法,并在找到后更新我的答案。
    • 请查看我更新的答案。在模拟器和真实设备上测试。
    • 感谢您的时间和关注,这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2011-05-28
    • 1970-01-01
    • 2021-09-07
    • 2017-12-23
    • 1970-01-01
    • 2022-12-03
    相关资源
    最近更新 更多