1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Foto machen bei App, die im Hintergrund läuft?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Extremefall, 27.04.2012.

  1. Extremefall, 27.04.2012 #1
    Extremefall

    Extremefall Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    83
    Erhaltene Danke:
    1
    Registriert seit:
    29.03.2012
    Hallo,
    ich habe eine App, die momentan ein Foto erzeugt, ohne dass ein Vorschaubild angezeigt wird. Leider klappt es nur, wenn die App den Fokus hat. Nun habe ich schon einige Funktionen, die auch funktionieren, wenn die App im Hintergrund läuft. Ich möchte also die App im Hintergrund laufen lassen und dann ein Foto machen.

    Mein Code bisher:
    PHP:
    [LEFT]@Override
    public void surfaceChanged(SurfaceHolder arg0int arg1int arg2int arg3

    mHandlerFoto.removeCallbacks(mUpdateTimeTaskFoto); 
    mHandlerFoto.postDelayed(mUpdateTimeTaskFoto10000);

    [/
    LEFT]

    [
    LEFT]@Override 
    public void surfaceCreated(SurfaceHolder holder

    // The Surface has been created, acquire the camera and tell it where 
    // to draw the preview. 
    mCamera Camera.open(); 
    try { 
    mCamera.setPreviewDisplay(holder); 

    } catch (
    IOException exception) { 
    mCamera.release(); 
    mCamera null



    @
    Override 
    public void surfaceDestroyed(SurfaceHolder holder

    //stop the preview 
    mCamera.stopPreview(); 
    //release the camera 
    mCamera.release(); 
    //unbind the camera from this object 
    mCamera null; [/LEFT]

    [
    LEFT
    private 
    Runnable mUpdateTimeTaskFoto = new Runnable() { 
    public 
    void run() { 
    //get camera parameters 
    parameters mCamera.getParameters(); 

    //set camera parameters 
    mCamera.setParameters(parameters); 
    mCamera.startPreview(); 

    //sets what code should be executed after the picture is taken 
    Camera.PictureCallback mCall = new Camera.PictureCallback() 

    @
    Override 
    public void onPictureTaken(byte[] dataCamera camera

    //decode the data obtained by the camera into a Bitmap 
    bmp BitmapFactory.decodeByteArray(data0data.length); 
    //set the iv_image 

    String path Environment.getExternalStorageDirectory().toString(); 
    OutputStream fOut null
    File file = new File(path"FitnessGirl.jpg"); 
    try {
    fOut = new FileOutputStream(file);


    bmp.compress(Bitmap.CompressFormat.JPEG85fOut); 
    fOut.flush(); 
    fOut.close(); 

    MediaStore.Images.Media.insertImage(getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());

    catch (
    Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();




    }; 

    mCamera.takePicture(nullnullmCall); 
    }[/
    LEFT]
    };
    Habe ich also die Möglichkeit, bei minimierter App ein Foto zu schießen?
     
  2. miha, 27.04.2012 #2
    miha

    miha Fortgeschrittenes Mitglied

    Beiträge:
    294
    Erhaltene Danke:
    43
    Registriert seit:
    12.01.2010
    Genau mein Thema :)
    Geht nur auf manchen Geräten indem du Preview null setzt.
    Ausserdem funktionieren Autofokus und Co nur bei sichtbarer Previewsurface. 1x1 Pixel Preview in transparenter, durchlässiger Activity als der alte Trick vieler Spycams geht aber auch nicht mehr auf allen Geräten. 8x8 geht auf den meisten wohl noch aber ist nicht so richtig Hintergrund.
    Ausserdem noch ein Problem der Shuttersound der trotz Tricks ohne Root nicht überall auszuschalten ist.
    Wenn du eine Lösung findest würde ich mich freuen sie zu hören.
     
    Zuletzt bearbeitet: 27.04.2012
    Extremefall bedankt sich.
  3. Extremefall, 27.04.2012 #3
    Extremefall

    Extremefall Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    83
    Erhaltene Danke:
    1
    Registriert seit:
    29.03.2012
    Und wie geht das? Ich bin auf diese Quelle gestoßen:
    Handy Codeworks » Blog Archive » Android Take Picture without Preview

    Leider weiß ich nicht, was ich als Parameter der Methode übergeben muss. Könntet ihr mir sagen, wie ich die Objekte erzeuge? Vielleicht auch mit Code. Geht es wohl auf dem Galaxy S2 2.3.3? Oder welche Alternativen habe ich? Kann ich nicht auch bei einer App, die im Hintergrund läuft, wieder den Fokus darauf setzen und direkt dannach minimieren? Wenn ja, wie?
     
  4. Extremefall, 27.04.2012 #4
    Extremefall

    Extremefall Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    83
    Erhaltene Danke:
    1
    Registriert seit:
    29.03.2012
    Leider habe ich das Problem, dass die Activity bei einer transparenten nicht im Hintergrund läuft. Somit würde ein klick zum minimieren die Anwendung schließen.

    Jetzt denke ich mir, dass ich doch einfach eine transparente Activity mache und dann wenn das Foto geschossen werden soll, den Fokus auf die App lege. Geht so etwas?
    Wie lege ich auf eine App, die im Hintergrund läuft, den Fokus?
     
    Zuletzt bearbeitet: 27.04.2012
  5. miha, 27.04.2012 #5
    miha

    miha Fortgeschrittenes Mitglied

    Beiträge:
    294
    Erhaltene Danke:
    43
    Registriert seit:
    12.01.2010
    Indem du sie per Intent startest? Zum Beispiel vom Service aus. Ob die Activity noch aktiv ist weisst du ja sonst garnicht. Activity im Hintergrund gibt es bei Android eigentlich nicht. Android killt wenn es lustig ist.

    Transparente Activity (Translucent.NoTitleBar) reicht evtl. nicht. Was ich noch setze sind die hier:
    FLAG_NOT_FOCUSABLE, FLAG_NOT_TOUCH_MODAL, FLAG_NOT_TOUCHABLE, FLAG_WATCH_OUTSIDE_TOUCH,
    Und das hier löschen: FLAG_DIM_BEHIND

    Ein Problem hat das Ganze noch: Leider kann das picture Callback manchmal einfach so ausbleiben. Dann sitzt du da mit dieser Activity die nicht weggeht ...
     
    Zuletzt bearbeitet: 27.04.2012
  6. Extremefall, 27.04.2012 #6
    Extremefall

    Extremefall Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    83
    Erhaltene Danke:
    1
    Registriert seit:
    29.03.2012
    Mache ich da bei Intent irgendetwas falsch?
    Code:
    [LEFT]appcontext = getApplicationContext();
    Intent intent = new Intent(appcontext, LocationActivity.class); 
    intent.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
    intent.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
    intent.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
    intent.addFlags(WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);[/LEFT]
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
    
     

Diese Seite empfehlen