我正在尝试创建一个可以检测用户何时拍照的应用.我设置了一个广播接收器类,并通过以下方式将其注册在清单文件中:
<receiver android:name="photoReceiver" >
<intent-filter>
<action android:name="com.android.camera.NEW_PICTURE"/>
<data android:mimeType="image/*"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
无论我尝试做什么,该程序都不会收到广播.这是我的接收器类:
public class photoReceiver extends BroadcastReceiver {
private static final String TAG = "photoReceiver";
@Override
public void onReceive(Context context, Intent intent) {
CharSequence text = "caught it";
int duration = Toast.LENGTH_LONG;
Log.d(TAG, "Received new photo");
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我删除清单和我的活动中的mimeType行,我会发送自己的广播
Intent intent = new Intent("com.android.camera.NEW_PICTURE");
sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)
然后我成功收到广播,可以看到日志和吐司窗口.我是以正确的方式接近这个吗?我需要添加什么东西吗?
android android-manifest android-camera android-camera-intent
根据文件,
"Each FileObserver instance monitors a single file or directory. If a directory is monitored,
events will be triggered for all files and subdirectories inside the monitored directory."
Run Code Online (Sandbox Code Playgroud)
我的代码就像,
FileObserver fobsv = new FileObserver("/mnt/sdcard/") {
@Override
public void onEvent(int event, String path) {
System.out.println(event+" "+path);
}
};
fobsv.startWatching();
Run Code Online (Sandbox Code Playgroud)
但是,onEvent()只有在/ mnt/sdcard /中更改文件时才会触发.如果我在/ mnt/sdcard/downloads /中创建一个文件,则该方法不会被触发.
代码有问题吗?