Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ist es denn eine Activity wenn "es" ausschließlich berechnet und nix von Android, GUI oder sonstigem weiß geschweige denn irgendwie selbst eine Oberfläche hat?
Prinzipiell ist die Antwort auf solche Fragen meistens Nein. Wie KSG9|sebastian richtig gefragt hat, gibt's da ja ein paar Punkte die man machen möchte, wenn man eine Activity braucht.
Da du nachfragen musst, möchtest du das nicht machen. Also Nein.
Du kannst natürlich trotzdem die Klasse als Listener oder als Publisher von Events verwenden, das hat ja so nichts mit der UI zu tun.
1. Immer in die Doku schauen. In diesem Fall kannst du die getSystemService-Methoden direkt in einer Activity verwenden, weil eine Activity ein Context-Objekt ist. Das heißt, wenn du die Service-Objekte nicht übergeben möchtest, übergib ein Context-Objekt. Über das kannst du das dann leicht instantieren.
2. Du schadest dir mit dem Vorgehen von Activity abzuleiten mehr als es dir hilft. Prinzipiell möchtest du ja eine Klasse schreiben um sie in anderen Activity zu verwenden. Wenn diese Klasse nun von Activity ableitet, kann sie auch nur noch mit dieser Activity verwendet werden. Dann müsstest du das ganze über startActivityForResult machen und das hört sich nicht danach an als wäre das in deinem Kontext sinnvoll.
Es kann schon sinnvoll sein, in einer Klasse die selbst keine UI-Klasse ist ein Context-Objekt zu haben. Die Adapter-Klassen für ListViews sind solche Fälle. Dort braucht man das Context-Objekt um einen Inflater zu erzeugen über den dann die Kindelemente befüllt werden können.
Aber man sollte immer wissen warum und wozu man das braucht.
Na ich glaube, ich muss konkreter werden.
ich habe folgende App:
Java:
public class MainActivity extends Activity {
private TextView txv;
private int threshold, ergebnis;
private SensorManager manager;
private Sensor sensorLight;
private SensorEventListener listener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
txv = (TextView) findViewById(R.id.txv);
manager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorLight = manager.getDefaultSensor(Sensor.TYPE_LIGHT);
threshold = 500;
txv.setText("Warten!");
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(100);
sensorLight();
}
/**
* Beobachten und Auswerten des Lichtwertes.
*/
public void sensorLight() {
listener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor1, int accuracy) { }
@Override
public void onSensorChanged(SensorEvent event) {
if (event.values.length > 0) {
ergebnis = (int) (event.values[0] + 0.5f);
if (ergebnis > threshold) {
txv.setText("Licht!");
}
}
}
};
manager.registerListener(listener, sensorLight,
SensorManager.SENSOR_DELAY_NORMAL);
}
}
Das ist ein Beispiel für eine größere App, aber für meine / diese Zwecke gut.
So weit funktioniert die App.
Mein Ziel ist es die Methode sensorLight() zu einer Bibliothek zu machen, welche ich in verschiedenen App nutzen kann.
Mein Plan ist folgender:
1.) die Methode in eine KlasseSucheLicht auslagern
2.) diese Klasse zur Bibliothek machen
Meine ungelösten Fragen:
Wie bekomme ich die Methode in eine WaitingForLight ?
(Wie zu sehen ist bin ich bis jetzt nicht sehr weit gekommen, obwohl ich mich seit heute morgen damit beschäftige.)
Wie erfährt MainActivity, wenn das Ereignis aus sensorLight(): (ergebnis > threshold) = true ist?
(siehe Zeile 36)
Wenn ich eine zweite Klasse schreibe, etwa so:
[XML]public class WaitingForLight {
WaitingForLight() {
threshold = 200;
manager = (SensorManager) getSystemService(SENSOR_SERVICE);
}
}[/XML]
, dann gibt es bereits einen Fehler in Zeile 10 beim Parameter SENSOR_SERVICE:
Da meine vorherige Antwort um 12:41 geposted wurde und deine fast zwei Stunden später kam, gehe ich davon aus, dass du mich oben nicht verstanden hast.
Da meine vorherige Antwort um 12:41 geposted wurde und deine fast zwei Stunden später kam, gehe ich davon aus, dass du mich oben nicht verstanden hast.