2017-05-13 3 views
0

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> 

+0

"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

+0

und was gibt 'startService' in Ihrem Fall zurück? – pskink

+0

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(). –

Antwort

0

Es ist Absturz in startServiceThread(), weil sie nicht die Informationen aus der Absicht

Dann bekommen sollten Sie vielleicht nicht den Faden beginnen, bis onStartCommand().

Wie dem auch sei, die onStartCommand() nicht Anrufe nach dem Startservice()

Das ist, weil Sie auf onCreate() sind abstürzt. Stoppen Sie den Absturz in onCreate(), und Sie sollten mehr Glück mit onStartCommand() haben.

+0

Vielen Dank! –