Hi!
Ich spiele schon seit einigen Wochen mit Android herum und wollte jetzt mal meine erste "richtige" App schreiben, die evt. was sinnvolles tut
Dabei muss ich einen Service im Hintergrund laufen haben, der ein paar Sachen tut - jedoch will der nicht so wirklich laufen. Ich habe einen eigenen Netzwerkmanager geschrieben, der eine Verbindung mit einem Server aufbaut. Dieser "NetworkManager" implementiert einen Service und soll als Service laufen. Nur leider will meine Activity den Service irgendwie nicht starten:
public class MyNetworkManager extends Service {
// ... ganz viel code
private final IBinder mBinder = (IBinder) new MyBinder();
@Override
public IBinder onBind(Intent arg0) {
return mBinder;
}
public class MyBinder extends Binder {
MyNetworkManager getService() {
return MyNetworkManager.this;
}
}
public void onCreate() {
//... alles für spätere Serverbindung vorbereiten; serverSocket von Java erzeugen etc.
}
public void onStart(Intent intent, int startid) {
while(true) {
//Verbindungen entgegenenehmen
}
}
Alles anzeigen
public class AndroidNetworkManagerClient extends Activity {
private Button buttonSend;
private EditText inputText;
private TextView outputText;
private MyNetworkManager networkManager;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder binder) {
networkManager = ((MyNetworkManager.MyBinder) binder).getService();
}
public void onServiceDisconnected(ComponentName className) {
networkManager = null;
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
inputText = (EditText) findViewById(R.id.textInput);
outputText = (TextView) findViewById(R.id.textOutput);
buttonSend = (Button)this.findViewById(R.id.buttonSend);
buttonSend.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (inputText.getText().length() != 0) {
outputText.append("Out: " + inputText.getText() + "\n");
networkManager.sendData("localhost", inputText.getText().toString());
}
}
});
bindService(new Intent(this, MyNetworkManager.class), mConnection, Context.BIND_AUTO_CREATE);
checkForNewPackages();
}
public void checkForNewPackages() {
// Abfrage ob der NetworkManager neue Pakete empfangen hat
}
Alles anzeigen
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="some.random.name"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".AndroidNetworkManagerClient"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".MyNetworkManager"></service>
</application>
</manifest>
Alles anzeigen
Das Problem ist nun folgendes: bindService(..) wird korrekt von der Activity gestartet, jedoch ist danach die Variable networkManager immernoch null. Ich habe mal versucht in die onCreate()-Methode vom NetworkManager zu debuggen, jedoch wird die anscheinend gar nicht aufgerufen, zumindest greift der Breakpoint an der Stelle nicht. Habe ich vielleicht irgendwas dummes in der AndroidManifest.xml vergessen oder so?
EDIT: Ersten kleinen Fehler gefunden: <uses-permission android:name="android.permission.INTERNET"></uses-permission> fehlte in der AndroidManifest. Leider bleibt das Problem bestehen.