2017-09-21 36 views
0

我試圖在添加圖庫時獲取圖庫中所有媒體的Uri。例如。用途拍攝照片。我自動收到一個包含Uri的意圖。我針對Apis 21-26,Android刪除了在Api 25中執行此操作的功能,而無需使用JobObservers。我不知道如何用JobObserver來做到這一點。有人可以幫忙嗎?如何在畫廊中獲得新媒體的Uri?

回答

0

首先,FileOberver是一種內存殺手方法。考慮大量的文件。而ContentObserver似乎是一種更好的方法。

getContentResolver().registerContentObserver(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI, true, 
     new ContentObserver(new Handler()) { 
      @Override 
      public void onChange(boolean selfChange) { 
       Log.d("your_tag","Internal Media has been changed"); 
       super.onChange(selfChange); 
       Long timestamp = readLastDateFromMediaStore(context, MediaStore.Images.Media.INTERNAL_CONTENT_URI); 
       // comapare with your stored last value and do what you need to do 

      } 
     } 
    ); 
getContentResolver().registerContentObserver(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true, 
    new ContentObserver(new Handler()) { 
     @Override 
     public void onChange(boolean selfChange) { 
      Log.d("your_tag","External Media has been changed"); 
      super.onChange(selfChange); 

      Long timestamp = readLastDateFromMediaStore(context, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      // comapare with your stored last value and do what you need to do 
     } 
     } 

); 

private Long readLastDateFromMediaStore(Context context, Uri uri) { 
     Cursor cursor = context.getContentResolver().query(uri, null, null, null, "date_added DESC"); 
     PhotoHolder media = null; 
     Long dateAdded =-1; 
     if (cursor.moveToNext()) { 
      Long dateAdded = cursor.getLong(cursor.getColumnIndexOrThrow(MediaColumns.DATE_ADDED));   
     } 
     cursor.close(); 
     return dateAdded; 
} 
+0

請問這個網站註冊並運行的每個用戶拍攝新照片或添加新的視頻時間? –

+0

或者我想我應該澄清一下,如何在新媒體添加時在後臺運行 –

0

要使用的jobscheduler使用您使用這些內容的URI

JobInfo.Builder builder = new JobInfo.Builder(ASJOBSERVICE_JOB_ID, new ComponentName("co.intellidev.storj", JobSchedulerService.class.getName())); 
      builder.addTriggerContentUri(new JobInfo.TriggerContentUri(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, flag)); 
      builder.addTriggerContentUri(new JobInfo.TriggerContentUri(MediaStore.Images.Media.INTERNAL_CONTENT_URI, flag)); 
      builder.addTriggerContentUri(new JobInfo.TriggerContentUri(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, flag)); 
      builder.addTriggerContentUri(new JobInfo.TriggerContentUri(MediaStore.Video.Media.INTERNAL_CONTENT_URI, flag));