Ich versuche, meinen Dienst mit StartService() zu aktivieren, und es sollte neben der onStartCommand() - Funktion gehen, aber es nicht. Ich habe viele Möglichkeiten versucht, die onStartCommand() -Funktion nicht zu verwenden, aber ich brauche die Informationen aus der Absicht in meinem Dienst. Hier ist der Code:StartService() ist nicht onStartCommand() -Funktion aktiv (Manifest ist korrekt)
MainAcitivty - OnCreate:
dbHelper = new DBHelper(this);
listTasks = (ListView)findViewById(R.id.list_todo);
loadTaskList();
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG).setAction("Action", null).show();
eventIntent = new Intent(view.getContext(), NewEventActivity.class);
startActivityForResult(eventIntent, ADD_EVENT_REQUEST);
}
});
Intent serviceIntent = new Intent(this, MyService.class);
serviceIntent.putExtra("dbHelper", (Parcelable)dbHelper);
if (!isMyServiceRunning(MyService.class))
{
startService(serviceIntent);
}
}
//gets any service class and check if its alive (running)
private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
MyService:
DBHelper dbHelper;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
startServiceThread();
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Bundle extras = intent.getExtras();
if (extras != null) {
dbHelper = (DBHelper)extras.get("dbHelper");
}
return super.onStartCommand(intent, flags, startId);
}
Manifest: (Auch hier habe ich versucht, den Dienst nur mit Namen hinzufügen = "MyService" , aber es hat nichts geändert)
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:name=".MyApplication">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity android:name=".NewEventActivity" />
<activity android:name=".LockApp">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name="com.example.user.project.MyService" />
</application>
"aber es nicht" - wie haben Sie das festgestellt? Haben Sie versucht, den unnötigen 'isMyServiceRunning()' Code loszuwerden? Stürzen Sie vielleicht in 'startServiceThread()' ab, wenn Sie bedenken, dass Sie diesen Code vor 'super.onCreate()' ausführen? – CommonsWare
und was gibt 'startService' in Ihrem Fall zurück? – pskink
Der isMyServiceRunning() Code funktioniert gut (vielleicht unnötig) aber @CommonsWare die Funktion startService() aufgerufen wird. Es ist ein Fehler in startServiceThread(), weil es die Informationen nicht aus der Absicht abrufen kann. Wie auch immer, der onStartCommand() ruft nach dem startService() nicht auf. Im Debugger wird startService() ausgeführt, aber nicht onStartCommand(). –