AnnaBauer21
Neues Mitglied
- 4
Hallo ihr Lieben,
ich hänge an einem Problem fest und verstehe nicht so ganz, warum das so nicht geht.
Vermutlich habe ich noch zu wenig Verständnis in der ganzen Thematik.
Und ich muss gestehen, alles was ich bis jetzt an Code habe ist aus dem Internet und ich verstehe teilweise nicht, warum das so gemacht wird.
Ich habe aktuell leider nicht die Zeit um mich genauer in diese Thematik einzuarbeiten und hoffe ihr könnt mir helfen das zum Laufen zu bringen
Folgendes möchte ich erreichen:
AndroidManifest.xml
MainMenu.java
YourService.java
Info:
Was übersehe ich? Was ist falsch oder muss anders gemacht werden?
Ich hoffe, ihr könnt mir helfen.
Vielen lieben Dank!
ich hänge an einem Problem fest und verstehe nicht so ganz, warum das so nicht geht.
Vermutlich habe ich noch zu wenig Verständnis in der ganzen Thematik.
Und ich muss gestehen, alles was ich bis jetzt an Code habe ist aus dem Internet und ich verstehe teilweise nicht, warum das so gemacht wird.
Ich habe aktuell leider nicht die Zeit um mich genauer in diese Thematik einzuarbeiten und hoffe ihr könnt mir helfen das zum Laufen zu bringen
Folgendes möchte ich erreichen:
- Nach dem Starten der App gibt es im Activity 2 Buttons
- Service starten
- Service beenden
- Der Service soll dauerhaft weiterlaufen, auch wenn ich die App in der Übersicht schließe
- Wenn ich jetzt wieder auf das App-Symbol drücke soll die GUI der App wieder geöffnet werden (und das geht aktuell leider nicht)
AndroidManifest.xml
XML:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.kugs.mydailyreminder">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
<activity
android:name=".Activities.MainMenu"
android:launchMode="singleTask"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".Helper.YourService"/>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
</application>
</manifest>
MainMenu.java
Java:
@SuppressLint("SetTextI18n")
public class MainMenu extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
FirstStartActions();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainmenu);
final Button bu1 = findViewById(R.id.button1);
bu1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startService(new Intent( getApplicationContext(), YourService.class ) );
}
});
final Button bu2 = findViewById(R.id.button2);
bu2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(new Intent( getApplicationContext(), YourService.class ) );
}
});
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onDestroy(){
super.onDestroy();
}
private void FirstStartActions() {
if (ContextCompat.checkSelfPermission(MainMenu.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(MainMenu.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
if (ContextCompat.checkSelfPermission(MainMenu.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(MainMenu.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
if (ContextCompat.checkSelfPermission(MainMenu.this, Manifest.permission.FOREGROUND_SERVICE) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(MainMenu.this, new String[]{Manifest.permission.FOREGROUND_SERVICE}, 1);
}
if (ContextCompat.checkSelfPermission(MainMenu.this, Manifest.permission.SYSTEM_ALERT_WINDOW) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(MainMenu.this, new String[]{Manifest.permission.SYSTEM_ALERT_WINDOW}, 1);
}
if (ContextCompat.checkSelfPermission(MainMenu.this, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(MainMenu.this, new String[]{Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS}, 1);
}
}
}
YourService.java
Java:
public class YourService extends Service {
public YourService() {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId){
onTaskRemoved(intent);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.d("Service", "" + i++);
startForegroundService(intent);
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onTaskRemoved(Intent rootIntent) {
Intent restartServiceIntent = new Intent(getApplicationContext(),this.getClass());
restartServiceIntent.setPackage(getPackageName());
startService(restartServiceIntent);
super.onTaskRemoved(rootIntent);
}
@Override
public ComponentName startForegroundService(final Intent service) {
return super.startForegroundService(service);
}
}
Info:
- Wenn ich die App in der Übersicht beende, läuft der Service dennoch weiter (Habe ich mit Logs im Logcat geprüft) allerdings wird onDestroy() nicht aufgerufen.
- Wenn ich die App erneut öffne sehe ich nur weiß, allerdings wird jetzt onDestroy durchlaufen und ich sehe weiterhin die Logs des Services laufen.
- Nach sehr sehr langer Zeit (5:30 Minuten) zeigt es mir endlich das MainMenu Activity an, bis dahin sind einige Logs eingegangen, ich weiß leider nicht was diese bedeuten.
-
Bash:
2024-12-30 21:02:35.503 14053-14053/de.mydailyreminder D/_MainMenu_onDestroy 2024-12-30 21:02:45.559 14053-14053/de.mydailyreminder I/Choreographer: Skipped 1208 frames! The application may be doing too much work on its main thread. 2024-12-30 21:03:25.665 14053-14053/de.mydailyreminder W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@1b045d6 2024-12-30 21:03:25.682 14053-14053/de.mydailyreminder D/_MainMenu_onCreate 2024-12-30 21:04:56.351 14053-14053/de.mydailyreminder I/Choreographer: Skipped 5412 frames! The application may be doing too much work on its main thread. 2024-12-30 21:06:26.814 14053-14058/de.mydailyreminder I/mydailyreminde: Compiler allocated 4MB to compile void android.widget.TextView.<init>(android.content.Context, android.util.AttributeSet, int, int) 2024-12-30 21:07:56.998 14053-14053/de.mydailyreminder I/Choreographer: Skipped 10836 frames! The application may be doing too much work on its main thread. 2024-12-30 21:07:57.050 14053-14082/de.mydailyreminder D/EGL_emulation: eglMakeCurrent: 0x7f892d642f80: ver 3 1 (tinfo 0x7f891c8bb6c0) 2024-12-30 21:07:57.073 14053-14082/de.mydailyreminder I/OpenGLRenderer: Davey! duration=180682ms; Flags=0, IntendedVsync=11531791668133, Vsync=11712391660909, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=11712402493540, AnimationStart=11712402768040, PerformTraversalsStart=11712407089640, DrawStart=11712408677140, SyncQueued=11712452209040, SyncStart=11712454714640, IssueDrawCommandsStart=11712454813540, SwapBuffers=11712456359840, FrameCompleted=11712476759940, DequeueBufferDuration=414000, QueueBufferDuration=808000,
-
- Die Logs vom Service laufen weiterhin
Was übersehe ich? Was ist falsch oder muss anders gemacht werden?
Ich hoffe, ihr könnt mir helfen.
Vielen lieben Dank!