Een activiteit van een service bellen

Ik heb een serviceklasse voor een alarmservice met de servicemethoden. Deze methoden worden opgeroepen wanneer de alarmservice is geactiveerd. Wat ik wil doen is een intentie naar een andere klasse te bellen in een van deze methoden die in de serviceklasse worden aangeroepen (wanneer het alarm afgaat). Het enige dat het doet is gewoon fouten markeren bij het aanroepen van de intentie. Dit gebeurt alleen in de methoden die worden aangeroepen wanneer de alarmservice is geactiveerd (methoden in serviceklasse). Is dit omdat de klasse Service verlengt en niet activiteit verlengt ? Ik weet het niet zeker, ides?

(Hieronder ziet u mijn serviceklasse, wanneer de intentie voor een andere activiteit wordt aangeroepen in de methode onStart wordt de app-force gesloten.)

public class MyAlarmService extends Service {
    @Override
    public void onCreate() {
       //TODO Auto-generated method stub
        Toast.makeText(this, "MyAlarmService.onCreate()", Toast.LENGTH_LONG).show();
    }

    @Override
    public IBinder onBind(Intent intent) {
       //TODO Auto-generated method stub
        Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show();
        return null;
    }

    @Override
    public void onDestroy() {
       //TODO Auto-generated method stub
        super.onDestroy();
        Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onStart(Intent intent, int startId) {
       //TODO Auto-generated method stub
        super.onStart(intent, startId);

        Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show();

        //////////////////////////////////////////////////////////////////////////////////

        Intent i = new Intent("com.exercise.AndroidAlarmService.HELLO"); 
        startActivity(i); 

        The intent that is send to open another class, an activity.
        **

        /////////////////////////////////////////////////////////////////////////////////
    }

    @Override
    public boolean onUnbind(Intent intent) {
       //TODO Auto-generated method stub
        Toast.makeText(this, "MyAlarmService.onUnbind()", Toast.LENGTH_LONG).show();
        return super.onUnbind(intent);
    }
}

Een van deze fouten op de LogCat is:

06-24 01: 11: 36.857: E/AndroidRuntime (10805): java.lang.RuntimeException: kan service niet starten [email protected] met Intent {flg = 0x4 cmp = com.exercise. AndroidAlarmService/.MyAlarmService (heeft extra's)}: android.util.AndroidRuntimeException: Calling startActivity() van buiten een activiteitencontext vereist de FLAG_ACTIVITY_NEW_TASK-vlag. Is dit echt wat je wilt?

0

3 antwoord

Heb je geprobeerd wat het foutenlogboek suggereert?

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
2
toegevoegd

U kunt een activiteit met behulp van onStart() van uw service bellen .....

@Override 
public void onStart(Intent intent, int startId)  { 
    ...
    Log.i("Service", "onStart() is called"); 
    Intent callIntent = new Intent(Intent.ACTION_CALL); 
    callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    callIntent.setClass();
    startActivity(callIntent);
    ...

}
0
toegevoegd

U kunt dit doen door de vlag in te schakelen zoals door anderen wordt gesuggereerd. De reden waarom dit standaard wordt voorkomen, is omdat services op de achtergrond automatisch worden herstart door het systeem. Als u een activiteit start tijdens onStart van een service, begint deze activiteit ongeacht wat de gebruiker doet. Dit zal een slechte gebruikerservaring zijn. Houd hier rekening mee en werk rond voor dit scenario.

0
toegevoegd