B
Braesident
Ambitioniertes Mitglied
- 1
Hallo Leute,
ich weiß, zu diesem Thema gibt es schon etliches im Netz und auch hier.. trotzdem komm ich nicht weiter.
Ein Service soll ca. alle halbe Std. ausgeführt werden. (im Moment alle 60 sek nur Text in eine Datei schreiben - Später http requests und responses)
Nicht funktionierend auf Huawei P30 pro mit Android 9 /api 28
minSdkVersion 21
targetSdkVersion 28
Nachdem es gedauert hat den Receiver für BOOT_COMPLETED gestartet zu bekommen will der Service nicht starten.
Wobei ich mir nicht sicher bin ob es am alarmManager oder Service liegt.
nun hab ich schon einiges gelesen und gehört... wie z.B. das ein Service unter api 28 nicht mehr gestartet werden könne... ich habe einige ansätze probiert doch leider hat bis jetzt nichts funktioniert.
Hat da jemand eine Idee ?
ich weiß, zu diesem Thema gibt es schon etliches im Netz und auch hier.. trotzdem komm ich nicht weiter.
Ein Service soll ca. alle halbe Std. ausgeführt werden. (im Moment alle 60 sek nur Text in eine Datei schreiben - Später http requests und responses)
Nicht funktionierend auf Huawei P30 pro mit Android 9 /api 28
minSdkVersion 21
targetSdkVersion 28
Nachdem es gedauert hat den Receiver für BOOT_COMPLETED gestartet zu bekommen will der Service nicht starten.
Wobei ich mir nicht sicher bin ob es am alarmManager oder Service liegt.
Java:
// Manifest
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/NoActionBar">
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON"/>
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
</intent-filter>
</receiver>
...
<service android:name=".MyService"
android:enabled="true">
</service>
</application>
// MyBroadcastReceiver
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
write();
Log.d("MYBROADCAST", "INCOMMING");
switch (intent.getAction()){
case ACTION_BOOT_COMPLETED:
Log.d("MYBROADCAST", "BOOT COMPLETED"); // Bis hier alles Super
AlarmManager alarmManager = (AlarmManager)context.getSystemService(ALARM_SERVICE);
Intent serviceIntent = new Intent(context, RollcardService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, serviceIntent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis() + 1000*60);
//alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000*60, pendingIntent);
alarmManager.setWindow(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000*60, pendingIntent);
break;
}
}
private void write(){
File folder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS);
File file = new File(folder, "MyService.txt");
try {
folder.mkdirs();
if (!file.exists()) file.createNewFile();
FileOutputStream outputStream = new FileOutputStream(file, true);
outputStream.write("ON_RECEIVE \n".getBytes());
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// MyService
public class RollcardService extends Service {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//Toast.makeText(getApplicationContext(), "EXECUTE", Toast.LENGTH_LONG).show();
Log.d("MY_SERVICE", "EXECUTE");
File folder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS);
File file = new File(folder, "MyService.txt");
Date currentTime = Calendar.getInstance().getTime();
try {
folder.mkdirs();
if (!file.exists()) file.createNewFile();
FileOutputStream outputStream = new FileOutputStream(file, true);
outputStream.write(currentTime.toString().getBytes());
outputStream.write("\n".getBytes());
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
stopSelf();
//return super.onStartCommand(intent, flags, startId);
return START_NOT_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) { return null; }
}
nun hab ich schon einiges gelesen und gehört... wie z.B. das ein Service unter api 28 nicht mehr gestartet werden könne... ich habe einige ansätze probiert doch leider hat bis jetzt nichts funktioniert.
Hat da jemand eine Idee ?