【发布时间】:2018-08-06 14:48:08
【问题描述】:
我正在尝试在服务中注册一个 FileObserver,以便在将新照片保存到“/DCIM/Camera/”时进行监控。 到目前为止,我已经尝试了所有可以在网上找到的东西。在我看来,它应该已经可以工作了……
我确实在清单中请求权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<service android:name=".FileWatcherService"
android:enabled="true"
android:exported="false"/>
<!-- Declaring broadcast receiver for BOOT_COMPLETED event. -->
<receiver android:name=".StartupReceiver" android:enabled="true" android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
我的观察者:
public class FileWatcherService extends Service {
static String PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/";
private static String TAG = "FileWatcher";
public static FileObserver fileObserver = new FileObserver(PATH, CREATE) {
@Override
public void onEvent(int i, @Nullable String s) {
Log.d(TAG, "eventttttt"); //never triggered
}
};
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy: service destroyed");
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate: service created");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int res = super.onStartCommand(intent, flags, startId);
fileObserver.startWatching();
Log.d(TAG,"Service started!");
return Service.START_STICKY;
}
public static void start(Context ctx) {
Intent i = new Intent(ctx, FileWatcherService.class);
ctx.startService(i);
}
}
主要活动:
public class MainActivity extends AppCompatActivity {
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
Log.v(".","Permission: "+permissions[0]+ "was "+grantResults[0]);
FileWatcherService.start(getApplicationContext());
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
}
我错过了什么?服务启动正常。
感谢您的帮助。
【问题讨论】:
-
有没有可能是你frogot
Read_external_storage?我在您的清单中找不到它 -
您是否提供了存储权限?
-
@BharathKumar 他提供了
write_external_storage,但我找不到read_external_storage,因为我已经评论过 -
@user12346352 如果提供了 write_external_storage,则隐式授予 read_external_storage。 developer.android.com/reference/android/Manifest.permission
-
您是否向用户请求了读取和编辑存储的权限?
标签: java android file fileobserver