Cześć, mam dziwny problem.
Ponieważ gdy uruchamiam swoją aplikację w środowisku, a w niej serwis i on rozpoczyna pracę. To wszystko działa tak jak chcę, jak zaprogramowałem.
Natomiast jak odłączę urządzenie od komputera. I zainstalowaną aplikację uruchomię bez niego. To wyskakuje mi powiadomienie od serwisu, natomiast już on nie działa.
Używam w swojej aplikacji NotificationListenerService, pierwsza metoda startuje, onStartCommand - tworzy kanał i tak dalej.
Natomiast metoda onNotificationPosted - już nie działa. Druga sprawa jest taka że jak uruchomię serwis(bez urządzenia PC, normalnie na telefonie), przejdę do ustawień i w ustawieniach dostępu do powiadomień odznaczę i zaznaczę swoją apkę ponownie - to wtedy nagle serwis zaczyna działać.
O co chodzi ? Czy serwis musi jeszcze zaciągnąć jakoś już istniejącą zgodę ?
Ktoś wie jak to naprawić ?
Proszę o pomoc
Edit:
Czyli tak:
Mam aplikację w której odpalam serwis, serwis rozszerza NotificationListenerService() - ponieważ chcę przechwytywać powiadomienia jakie pojawią się na pasku powiadomień.
I generalnie mój serwis jest zadeklarowany w manifeście
<service
android:name=".objects.MainService"
android:label="MainService"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
I jak testują swoją aplikację, podłączam urządzenie (mój telefon) I klikam w Android studio Run. I to generalnie działa, aplikacja jest zainstalowana. Po uruchomieniu swojego serwisu, działa on jak należy.
Teraz wyłączam aplikację i wyłączam swój serwis. Odłączam kabelek od telefonu łączący komputer.
Odpalam ponownie swoją aplikację i uruchamiam normalnie serwis (podłączam kabelek żeby widzieć logi spływające)
Wyskakuje mi komunikat że serwis pracuje, ale nie jest wykonywana wgl ta metoda onNotificationPosted() (mam tam Log.D na starcie i jest zawsze przynajmniej powiadomienie jak coś się wydarzy)
Teraz żeby było śmieszniej, jak odpalimy serwis i pójdziemy do uprawnień aplikacji w ustawieniach systemowych i ponownie nadamy jej uprawnienia na dostęp do powiadomień. To serwis startuje.
Stąd moje pytanie było czy musi być jakieś zassanie jeszcze raz pozwoleń:
moja metoda onStartCommand:
public int onStartCommand(Intent intent, int flags, int startId) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel(
"abc.eu", "xyzabc", NotificationManager.IMPORTANCE_HIGH
);
NotificationManager manager = getSystemService(NotificationManager.class);
manager.createNotificationChannel(notificationChannel);
}
Intent intent1 = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new NotificationCompat.Builder(this, "abc.eu")
.setContentTitle("title")
.setContentText("Content")
.setContentIntent(pendingIntent).build();
startForeground(1, notification);
packageManager = getPackageManager();
apps = loadData(apps);
Log.d("MainService", "onStartCommand");
return START_STICKY;
}