How can I update Gallery After a Photo had been taken?

Viewed 16

I created a program to capture a photo but when i look at it in the Photo Gallery it does not appear immediately. I Already used the command provided in the other questions in this site which is similar to this Code:

"sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(myNewFile)));"

this is my entire code: enter code here

 public class PicturesActivity extends AppCompatActivity {
 public static final int REQUEST_TAKE_PHOTO = 1;
 public static final String ACCOUNTNUM = "AccountNum";
 public static final String METERNO = "MeterNo";
 public static final int CAMERA_PERMISSION_REQUEST_CODE = 4192;
 private static final String ALBUM_NAME = "DailySelfie";
 private static final String JPEG_FILE_PREFIX = "IMG_";
 private static final String JPEG_FILE_SUFFIX = ".jpg";
 private static final String CAMERA_DIR = "/dcim/";

 public static final String FILE_PATH_EXTRA = "image_currentPath";
 private static final long INITIAL_ALARM_DELAY = 2 * 60 * 1000L;
 public static final int REQUEST_CODE = 228;
 private static final int CAMERA_REQUEST_CODE = REQUEST_CODE;

 private ImageAdapter imageAdapter = null;
 private String mCurrentPhotoPath = null;
 private File capturedImage;

 private AlarmManager alarmManager;
 private Intent notificationReceiverIntent;
 private PendingIntent notificationReceiverPendingIntent;


 private ListView pictureList;
 private SearchView searchText;
 private File  pictureFile;

 private int pictureCounter = 1;

 @Override
 protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pictures);
    this.pictureList = (ListView) findViewById(R.id.picture_list);
    this.searchText = (SearchView) findViewById(R.id.edit_image_search);

    this.alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    this.imageAdapter = new ImageAdapter(getApplicationContext());
    notificationReceiverIntent = new Intent(PicturesActivity.this, SelfieBroadCastReceiver.class);
    notificationReceiverPendingIntent = PendingIntent.getBroadcast(PicturesActivity.this, 0, notificationReceiverIntent, 0);

    getSupportActionBar();

    this.pictureList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            ImageRecord imageRecord = imageAdapter.getItem(position);
            Intent picDetailIntent = new Intent(getApplicationContext(), PictureDetailActivity.class);
            picDetailIntent.putExtra(FILE_PATH_EXTRA, imageRecord.getFullPath());
            startActivity(picDetailIntent);
        }
    });

    this.searchText.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            //imageAdapter.getFilter().filter(query);
            return false;
        }
        
@Override
public boolean onQueryTextChange(String newText) {
    imageAdapter.getFilter().filter(newText);
    return false;
    }
  });

  try {
     this.pictureList.setAdapter(imageAdapter);
    }catch (Exception e){
        Toast.makeText(getApplication(),e.toString(),Toast.LENGTH_SHORT).show();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) {
        renameFile(this.capturedImage);
    }
}

@Override
protected void onResume() {
    super.onResume();
    this.setUpPicList();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.pictures_menu, menu);
    return true;
}

@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public boolean onOptionsItemSelected(MenuItem item)  {
    switch (item.getItemId()){
        case R.id.show_camera:
            if(checkSelfPermission(Manifest.permission.CAMERA)== PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)==PackageManager.PERMISSION_GRANTED){
                try {
                    dispatchTakePictureIntent();
                }catch (IOException e){}
            }else{
                String[] permissionRequest = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
                requestPermissions(permissionRequest, CAMERA_PERMISSION_REQUEST_CODE);
            }
            return true;
        case R.id.set_alarm:
            setAlarm();
            return true;
        case R.id.cancel_alarm:
            cancelAlarm();
            return true;
        default:
            return false;
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(requestCode==CAMERA_PERMISSION_REQUEST_CODE){
        if(grantResults[0] == PackageManager.PERMISSION_GRANTED & grantResults[1]== PackageManager.PERMISSION_GRANTED){
            try {
                dispatchTakePictureIntent();
            }catch(IOException e){}
        }else{
            viewSnackBar(getString(R.string.camera_needed_permission));
        }
    }
    
}

private void dispatchTakePictureIntent() throws IOException{
    pictureFile = createImageFiles();
    Uri  uriFile = FileProvider.getUriForFile(this, getApplicationContext().getPackageName()+ ".provider", pictureFile);
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,uriFile);
    takePictureIntent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    startActivityForResult(takePictureIntent, CAMERA_REQUEST_CODE);
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(pictureFile)));
    scanMedia(pictureFile.toString());
}

private File createImageFiles() {
    SharedPreferences prefs = getSharedPreferences(ACCOUNTNUM, MODE_PRIVATE);
    SharedPreferences meterNum = getSharedPreferences(METERNO, MODE_PRIVATE);

    final String accountNumber = prefs.getString("accountNum", null);
    final String MeterNumber = meterNum.getString("MeterNo", null);

   File picturesDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
   File imageFile = new File(picturesDirectory, accountNumber + "-" + MeterNumber.trim() + "-"+ pictureCounter + ".JPG");
   pictureCounter++;
   return imageFile;
}

private void scanMedia(String path) {
    File file = new File(path);
    Uri uri = Uri.fromFile(file);
    Intent scanFileIntent = new Intent(
            Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
    sendBroadcast(scanFileIntent);
}

public void viewSnackBar(String message){
    View parentLayout  = findViewById(android.R.id.content);
    Snackbar.make(parentLayout, message, Snackbar.LENGTH_LONG).show();
}

private void renameFile(File file) {
    SharedPreferences prefs = getSharedPreferences(ACCOUNTNUM, MODE_PRIVATE);
    final String accountNumber = prefs.getString("accountNum", null);
    final Dialog dialog = new Dialog(PicturesActivity.this);
    dialog.setContentView(R.layout.file_prompt);
    final EditText editText = (EditText) dialog.findViewById(R.id.editTextDialogUserInput);
    final Button button = (Button) dialog.findViewById(R.id.saveButton);
    final File oldFile = file;
    try {
        editText.setText(accountNumber);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!TextUtils.isEmpty(editText.getText().toString())) {
                    String fileName = editText.getText().toString().toLowerCase() + "-";
                    try {
                        File newFile = File.createTempFile(fileName, JPEG_FILE_SUFFIX, getAlbumDir());
                        oldFile.renameTo(newFile);
                        setUpPicList();
                        dialog.dismiss();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        dialog.show();
    }catch (Exception e){
        Toast.makeText(getApplication(), e.toString(),Toast.LENGTH_SHORT).show();
    }
}

private File getAlbumDir(){
    File storageDir = null;

    if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
        storageDir = getAlbumStorageDir();

        if(storageDir != null){
            if(!storageDir.mkdirs()){
                if(!storageDir.exists()){
                    Log.d("DailySelfie", "Failed to create directory");
                    return null;
                }
            }
        }
    } else {
        Log.v("DailySelfie", "External Storage is not mounted READ/WRITE");
    }
    return storageDir;
}

///************************* private File getAlbumStorageDir(){ File picturesDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); return picturesDirectory; //return new File(Environment.getExternalStorageDirectory() + CAMERA_DIR + ALBUM_NAME); }

private void galleryAddPic(){
    Intent mediaScanIntent = new Intent("android.intent.action.MEDIA_SCANNER_SCAN_FILE");
    File file = new File(mCurrentPhotoPath);
    Uri contentUri = Uri.fromFile(file);
    mediaScanIntent.setData(contentUri);
    this.sendBroadcast(mediaScanIntent);
}



private void setUpPicList(){
    imageAdapter.removeAllViews();

    File albumFile = getAlbumDir();

    if(albumFile.isDirectory() && albumFile.exists()){
        File[] files = albumFile.listFiles();
        for(File file : files){
            ImageRecord imageRecord = new ImageRecord(file);
            imageAdapter.add(imageRecord);
        }
    }
}

}

0 Answers
Related