Sorry for my really bad explanation, this problem drives me up the
wall...

The situation is:

from my app, I call Camera application, take a picture and go back to
my app. So, I do as follows:

       Intent camara = new
Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
       startActivityForResult(camara, CAMERA_PIC_REQUEST);

Then, when I go back to my app, I handle the picture:

        protected void onActivityResult(int requestCode, int
resultCode, Intent data) {
                if(requestCode == CAMERA_PIC_REQUEST) {
                        if(data == null) {
                                //do some stuff,
                        }else {
                                //get the bitmap
                                Bitmap myPicture = 
(Bitmap)data.getExtras().get("data");

                                //save the bitmap
                                _pictures.add(myPicture);

                               //and delete the picture from the
device
                                _helper.deleteFiles(); //this method, delete 
the picture from the
sdcard
                                _helper = null;

                               //in the gallery app, remains a
"picture" or thumbnail of the picture I've just taken, and
                              //here is where I have the problem,
because I cannot find a good solution to delete or clean
                               //the gallery.

                              //I'll write my options below

                        }
                }
        }


So, the things I tried are:

1)  //This option doesn't work on some devices like the galaxy S (I
don't know why)
                                Uri uri = data.getData();
                                getContentResolver().delete(uri, null, null);

2) //This option works but launch the mediaScanner, and makes some
devices (like the galaxy S) really slow, so I'm trying
   // to avoid this option:
                             sendBroadcast(new
Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" +
Environment.getExternalStorageDirectory())));

3) //This option tries to change the directory, but I think I'm
missing something, because the pictures are displayed in the gallery
app (and i don't want that)
//Where I launch the camera, I wrote:

               _path = Environment.getExternalStorageDirectory()+"/
tempPictures/.nomedia";
                File file = new File(_path);
                Uri uri = Uri.fromFile( file );
                Intent camara = new
Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                camara.putExtra( MediaStore.EXTRA_OUTPUT, uri);
                startActivityForResult(camara, CAMERA_PIC_REQUEST);

4) I tried to do what Liang proposed: "You can let camera return
bitmap data, then you handle the data by yourself. There is no file
saved this way." I did using Intent.#setType(String) but It never
worked.

So, what am I missing? what am I doing wrong?

Thanks for reading and helping!

On Apr 26, 2:26 pm, Liang Wang <[email protected]> wrote:
> 1. For first option, if you provide more details , that will be helpful.
>
> 2. For second option. It will be better if you store the file into a
> directory in sd card instead of root directory. For example:
> in /sdcard/TempDir/, there are two files
>        .nomedia (empty file, to stop media scanner)
>        youfile.jpg (you specified file)
>
> 3. Maybe camera saved another image that can be seen in gallery beside
> saving to your file. If this is true, you can delete your file safely with
> .nomedia protection. It will not influence the gallery.
>
> Hope these are helpful. But camera implementation of different phones may
> differ. I'm not sure if above can work.
>
> On Tue, Apr 26, 2011 at 6:42 PM, Fina Perez <[email protected]> wrote:
>
> > Hi,
> >  that's what I'm using now, because I cannot make the first option
> > runs. But I'm having problems with the second option too..
>
> > _path = Environment.getExternalStorageDirectory() + ".nomedia";
> > Intent camara = new
> > Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
> > File file = new File(_path);
> > Uri uri = Uri.fromFile(file);
> > camara.putExtra(MediaStore.EXTRA_OUTPUT, uri);
> > startActivityForResult(camara, CAMERA_PIC_REQUEST);
>
> > this is the code I'm using to "hide" the pictures I take with the
> > camera, but they still appear in the Gallery app, which is what I want
> > to avoid. And I want to avoid the mediascanner runs too...
>
> > Please, please, help!
>
> > On Apr 26, 10:28 am, Liang Wang <[email protected]> wrote:
> > > Hi Fina,
>
> > > I think below code will work:
> > > Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
> > > startActivityForResult(intent, ...);
>
> > > Then you can handle the bitmap in onActivityResult().
>
> > > The code you mentioned is from android built-in Camera application. There
> > > you can see how camera app give result to you. From that you can get how
> > to
> > > handle the result.
>
> > > On Tue, Apr 26, 2011 at 3:51 PM, Fina Perez <[email protected]>
> > wrote:
> > > > Hi Liang!
> > > > thanks a lot for your answer.
>
> > > > I was trying the first option but I'm having problems to tell the
> > > > camera that I want a bitmap. I tryed to use the method
> > > > "Inteng.#setType(String)" but I got an exception   And I don't know
> > > > where the code you wrote comes from, I mean Is that the way to ask for
> > > > a bitmap object as result? I thought it was more "intuitive" hehehe
>
> > > > On Apr 22, 11:56 am, Liang Wang <[email protected]> wrote:
> > > > > 1. You can let camera return bitmap data, then you handle the data by
> > > > > yourself. There is no file saved this way.
>
> > > > > 2. If you let camera save the image to file in a specified
> > > > directory(through
> > > > > provider), making a empty file named .nomedia in that directory can
> > > > prevent
> > > > > mediascanner from scanning it. This way this image will not appear in
> > > > > gallery.
>
> > > > > See the code below in Camera:
> > > > >             if (mSaveUri != null) {
> > > > >                 OutputStream outputStream = null;
> > > > >                 try {
> > > > >                     outputStream =
> > > > > mContentResolver.openOutputStream(mSaveUri);
> > > > >                     outputStream.write(data);
> > > > >                     outputStream.close();
>
> > > > >                     setResult(RESULT_OK);
> > > > >                     finish();
> > > > >                 } catch (IOException ex) {
> > > > >                     // ignore exception
> > > > >                 } finally {
> > > > >                     Util.closeSilently(outputStream);
> > > > >                 }
> > > > >             } else {
> > > > >                 Bitmap bitmap = createCaptureBitmap(data);
> > > > >                 setResult(RESULT_OK,
> > > > >                         new Intent("inline-data").putExtra("data",
> > > > bitmap));
> > > > >                 finish();
> > > > >             }
>
> > > > > On Fri, Apr 22, 2011 at 4:51 PM, Fina Perez <[email protected]>
> > > > wrote:
> > > > > > Hi!
>
> > > > > > I answer myself:
>
> > > > > > maybe is not the best solution but after deleting the file, this is
> > > > > > what I do:
>
> > > > > > sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
> > > > > > Uri.parse("file://" + Environment.getExternalStorageDirectory())));
>
> > > > > > we need to add this to the manifest:
> > > > > > <intent-filter>
> > > > > >  <action android:name="android.intent.action.MEDIA_MOUNTED" />
> > > > > >  <data android:scheme="file" />
> > > > > > </intent-filter>
>
> > > > > > (I found the solution here:
>
> >http://stackoverflow.com/questions/4430888/android-file-delete-leaves.
> > > > ..
> > > > > > )
>
> > > > > > On Apr 21, 11:32 am, Fina Perez <[email protected]> wrote:
> > > > > > > Hi all!
>
> > > > > > > I'm using  the built-in camera in my app to take a picture and to
> > > > save
> > > > > > > it in a database. So, from my activity, I launch the camera, take
> > a
> > > > > > > picture and go back to the activity (thanks to "onActivityResult"
> > > > > > > method). Here, I store the picture in the database and I delete
> > it
> > > > > > > from the phone. Seems to be working properly: the picture is
> > being
> > > > > > > deleted from the sdcard but if you go to the gallery app that
> > comes
> > > > > > > with the device, the picture is being displayed but as a "wrong
> > > > file",
> > > > > > > so you can see that there is/was a picture there but you can't
> > open
> > > > it
> > > > > > > or even see the preview.  But I can delete it from the gallery
> > app
> > > > > > > manually (selecting them and then deleting). How can i do this
> > > > > > > programatically?
>
> > > > > > > Thanks a lot! I really need help with this
>
> > > > > > --
> > > > > > You received this message because you are subscribed to the Google
> > > > > > Groups "Android Developers" group.
> > > > > > To post to this group, send email to
> > > > [email protected]
> > > > > > To unsubscribe from this group, send email to
> > > > > > [email protected]
> > > > > > For more options, visit this group at
> > > > > >http://groups.google.com/group/android-developers?hl=en
>
> > > > --
> > > > You received this message because you are subscribed to the Google
> > > > Groups "Android Developers" group.
> > > > To post to this group, send email to
> > [email protected]
> > > > To unsubscribe from this group, send email to
> > > > [email protected]
> > > > For more options, visit this group at
> > > >http://groups.google.com/group/android-developers?hl=en
>
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Android Developers" group.
> > To post to this group, send email to [email protected]
> > To unsubscribe from this group, send email to
> > [email protected]
> > For more options, visit this group at
> >http://groups.google.com/group/android-developers?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to