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