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

E

Extremefall

Ambitioniertes Mitglied
3
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 arg0, int arg1, int arg2, int arg3) 
{ 
mHandlerFoto.removeCallbacks(mUpdateTimeTaskFoto); 
mHandlerFoto.postDelayed(mUpdateTimeTaskFoto, 10000);

[/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[] data, Camera camera) 
{ 
//decode the data obtained by the camera into a Bitmap 
bmp = BitmapFactory.decodeByteArray(data, 0, data.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.JPEG, 85, fOut); 
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(null, null, mCall); 
}[/LEFT]
};
Habe ich also die Möglichkeit, bei minimierter App ein Foto zu schießen?
 
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:
  • Danke
Reaktionen: Extremefall
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?
 
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:
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:
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);
 

Ähnliche Themen

S
Antworten
8
Aufrufe
511
swa00
swa00
M
Antworten
3
Aufrufe
161
moin
M
Manny87
  • Manny87
Antworten
11
Aufrufe
163
swa00
swa00
Zurück
Oben Unten