Hallo zusammen.
Ich muss für die Schule eine Android-App schreiben mit der es möglich ist Bilder zu machen und diese werden danach automatisch an einen FTP-Server übertragen. Das soll nicht schön aussehen, das muss nur funktionieren. Egal wie. Ich hänge nun schon Tage lang an meinem Problem und finde keine Lösung. Ich habe nur noch knapp eine Woche Zeit dafür und allmählich läuft mir die Zeit davon.
Das Prinzip mit dem Bild machen und an einen FTP-Server ist im Prinzip nix großes eigentlich. Für mich leider als absolten Anfänger schon
Nun zu dem was ich schon habe:
Ich habe schon eine Kamera Actitvity und ein KameraCallbacks und eine FTP-Manager Acitivity.
Mit meiner FTPActivity kann ich mittlerweile nun endlich mal bei Aufruf der Activity ein Txt-Dokument auf meinen FTP-Server schicken.
Meine KameraActivity habe ich soweit umgeändert, dass ich nun Bilder in einem von mir ausgewählten ordner speichere. Dieser ist "/sdcard/FTP/"
Frage 1:
Wie sage ich nun meiner FTPActivity, dass es genau die Bilder in dem Ordner
"/sdcard/FTP/" übertragen soll? Wie und wo muss ich den Code entsprechend umändern?
Frage 2:
Ich habe ja die KameraActivity. Wie sage ich dieser, dass diese nach dem speichern des Bildes automatisch die FTPActivity aufruft?
Ich glaube irgendwie mit Intents. Aber wie? Ich habe schon etliche Male probiert das irgendwo einzufügen. Aber es klappt einfach nicht. Wie und wo muss ich den Code entsprechend auch hier umändern?
Hier mal die KameraActivity:
und die KameraCallbackActivity:
und schließlich die FTP-Activity:
Ich muss für die Schule eine Android-App schreiben mit der es möglich ist Bilder zu machen und diese werden danach automatisch an einen FTP-Server übertragen. Das soll nicht schön aussehen, das muss nur funktionieren. Egal wie. Ich hänge nun schon Tage lang an meinem Problem und finde keine Lösung. Ich habe nur noch knapp eine Woche Zeit dafür und allmählich läuft mir die Zeit davon.
Das Prinzip mit dem Bild machen und an einen FTP-Server ist im Prinzip nix großes eigentlich. Für mich leider als absolten Anfänger schon
Nun zu dem was ich schon habe:
Ich habe schon eine Kamera Actitvity und ein KameraCallbacks und eine FTP-Manager Acitivity.
Mit meiner FTPActivity kann ich mittlerweile nun endlich mal bei Aufruf der Activity ein Txt-Dokument auf meinen FTP-Server schicken.
Meine KameraActivity habe ich soweit umgeändert, dass ich nun Bilder in einem von mir ausgewählten ordner speichere. Dieser ist "/sdcard/FTP/"
Frage 1:
Wie sage ich nun meiner FTPActivity, dass es genau die Bilder in dem Ordner
"/sdcard/FTP/" übertragen soll? Wie und wo muss ich den Code entsprechend umändern?
Frage 2:
Ich habe ja die KameraActivity. Wie sage ich dieser, dass diese nach dem speichern des Bildes automatisch die FTPActivity aufruft?
Ich glaube irgendwie mit Intents. Aber wie? Ich habe schon etliche Male probiert das irgendwo einzufügen. Aber es klappt einfach nicht. Wie und wo muss ich den Code entsprechend auch hier umändern?
Hier mal die KameraActivity:
Code:
package de.android.datenuebertragung;
import java.io.IOException;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.hardware.Camera;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
public class Kamera extends Activity implements SurfaceHolder.Callback {
private static final String TAG = Kamera.class.getSimpleName();
private Camera camera = null;
private SurfaceHolder holder = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Benutzeroberfläche anzeigen
setContentView(R.layout.cam);
final SurfaceView view = (SurfaceView) findViewById(R.id.view);
holder = view.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// wir brauchen dieses Objekt für die Aufnahme
final KameraCallbacks callbacks = new KameraCallbacks();
// auf Anklicken reagieren
view.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
camera.takePicture(callbacks, null, callbacks);
}
});
}
@Override
protected void onPause() {
super.onPause();
// ganz wichtig: Callback entfernen und Kamera freigeben
if (camera != null) {
holder.removeCallback(this);
camera.release();
camera = null;
}
}
Intent intent = new Intent (this, FTPManager.class);
@Override
protected void onResume() {
super.onResume();
// prüfen, ob Kamera vorhanden ist
camera = Camera.open();
if (camera != null) {
Camera.Parameters p = camera.getParameters();
List<Camera.Size> list = p.getSupportedPreviewSizes();
Camera.Size size = list.get(list.size() - 1);
p.setPreviewSize(size.width, size.height);
camera.setParameters(p);
holder.addCallback(this);
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
}
public void surfaceCreated(SurfaceHolder holder) {
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (IOException e) {
Log.e(TAG, "surfaceCreated()", e);
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
}
und die KameraCallbackActivity:
Code:
package de.android.datenuebertragung;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Environment;
import android.util.Log;
public class KameraCallbacks implements ShutterCallback, PictureCallback {
private static final String TAG = KameraCallbacks.class.getSimpleName();
public void onShutter() {
Log.d(TAG, "onShutter()");
}
public void onPictureTaken(byte[] data, Camera camera) {
Log.d(TAG, "onPictureTaken()");
// In welchem Verzeichnis soll die Datei abgelegt werden?
File dir = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
// ggf. Verzeichnisse anlegen
dir.mkdirs();
// Name der Datei // File wird in einem extra Ordner gespeichert
File file = new File(String.format("/sdcard/DCIM/PicFTP/%d.jpg",
System.currentTimeMillis()));
FileOutputStream fos = null;
BufferedOutputStream bos = null;
// Datei gepuffert schreiben
try {
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
bos.write(data);
} catch (IOException e) {
Log.e(TAG, "onPictureTaken()", e);
} finally {
// Ströme schließen - etwaige Exceptions ignorieren
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
}
}
// Live-Vorschau neu starten
camera.startPreview();
}
}
}
und schließlich die FTP-Activity:
Code:
package de.android.datenuebertragung;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
import android.app.Activity;
import android.util.Log;
public class FTPManager extends Activity{
FTPClient con = new FTPClient();{
try
{
con.connect("host");
if (con.login("user", "password"))
{
con.enterLocalPassiveMode(); // important!
String data = "Test vom 09.06.12";
ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());
boolean result = con.storeFile("/FTPTest.txt", in);
in.close();
if (result) Log.v("upload result", "succeeded");
System.out.println("Test ok ...");
}
}
catch (Exception e)
{
e.printStackTrace();
}
try
{
con.logout();
con.disconnect();
}
catch (IOException e)
{
e.printStackTrace();
}
}}