Android startForeGround () вызывает исключения на некоторых устройствахAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android startForeGround () вызывает исключения на некоторых устройствах

Сообщение Anonymous »

Я написал и опубликовал приложение « recording датчика < /strong>», которое считывает и отображает измеренные значения некоторых датчиков (положение, ускорение, ориентация, микрофон и т. Д.).
Приложение записывает данные датчика непрерывно в фоновом режиме, даже если дисплей выключается (режим поддержки). Для этой функции я установил сервис, который начинается с помощью пользовательского взаимодействия (кнопка нажатия).
По состоянию на Android версию 12, в коде должны быть какие -то предпосылки и в манифесте, которые я выполнил.

Код: Выделить всё

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
// ...
// ...

String channelId = "4711";  // arbitrary
Intent notificationIntent = new Intent(this, SensorService.class);

int flag = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE;
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, flag);
Notification notification;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)     // O = OREO = 26
{
NotificationChannel channel = new NotificationChannel(channelId,
getString(R.string.app_name),
NotificationManager.IMPORTANCE_HIGH);

notMan = getSystemService(NotificationManager.class);

if (notMan != null)
{
notMan.createNotificationChannel(channel);

Notification.Builder builder = new Notification.Builder(this, channelId);

builder.setSmallIcon(R.drawable.vector3d_bg_transp)
.setContentTitle(text0)
.setContentText(text1)
.setTicker(text1)
.setSubText("Start Service")
.setShowWhen(true)
.setAutoCancel(true)
.setTimeoutAfter(500)
.setChannelId(channelId)
.setDefaults(Notification.DEFAULT_ALL)
.setPriority(Notification.PRIORITY_HIGH)
.setCategory(Notification.CATEGORY_MESSAGE)
.setVisibility(Notification.VISIBILITY_PUBLIC)
.setContentIntent(pendingIntent);

notification = builder.build();

int serviceType = 0;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)     // Q = Quince Tart = 29
serviceType |= ServiceInfo.FOREGROUND_SERVICE_TYPE_LOCATION;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)     // R = Red Velvet Cake = 30
serviceType |= ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE;

ServiceCompat.startForeground(this, id, notification, serviceType);
}
}
else
{
// ...
}

return START_REDELIVER_INTENT;
}
и извлечение из « androidmanifest.xml »:

Код: Выделить всё
















< /code>
Это прекрасно работает на четырех версиях устройств /Android, которые я протестировал: < /p>
[list]
[*] Samsung Galaxy A14 (Android 13) < /li>
 Google Pixel 6a (Android 15) < /li>
 samsung galaxy table 6a (android 15) < /li>
   
  
  
 
 
 
 
 
 />  Huawei P10 Lite (Android 8.0) < /li>
< /ul>
Однако в консоли разработчика Google (раздел Android Vitals, Crashes и Anrs), я получаю частые сообщения об ошибках из других устройств (с Android 14 или 15), на которых у меня нет физического доступа: < /p>
      
ServiceCompat.startForeground(this, id, notification, serviceType);

и является либо « securityException « или « передовое плавание, которое можно найти источник ошибок? /> Исключение java.lang.runtimeexception: at
(активность />( ActivityThread.java:2381) at android.os.handler.dispatchmessage
(handler.java:106) at android.os.looper.looponce (looper.java:205)

atroid.os.looper.loop (looper.java:294) at
atroid.os.looper.loop (looper.java:294). /> android.app.activityThread.main (ActivityThread.java:8376) at
Java.lang.reflect.method.invoke at
comm.android.internal.os.runtimeinit$methodandargscaller.run
(runtime.java:640). com.android.internal.os.zygoteinit.main
(zygoteinit.java:982), вызванная java.lang.securityexception < /strong>: at
android.os.parcel.readexception (parcel.java:3024) at
android.app.iactivitymanager $ at android.app.service.startforeground
(service.java:862) at
androidx.core.app.servicecompat $api34impl.startforeground
(servicecompat.java:241) at
androidx.core.servicepatrathpartiprathorworkfatartiprathorworkfortartipratworkfatorworh />(serviceCompat.java:172) at
net.braun_home.sensorercording.sensorservice.onstartCommand
(Sensorservice.java:549) < /strong> at
remote Stack Trace: at
comm.android.server.am.activesers.validateforegroundServiceType
( AactiveServices.java:2690) at
comproid.server.amviesservices.setserviceforkgroglockgrograkgrockgroundin />( AactiveServices.java:2401) at
comm.android.server.am.activesers.setserviceforegradlocked
( Aactivesers.java:1748) at
comm.android.server.am.ActivityManagerService.setSerficeReviceReviceReviceReviceService.SestugraviceReviceService. at
android.app.iactivitymanager$stub.ontransact
(аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааы java.lang.runtimeexception: at
(активность />( ActivityThread.java:2531) at android.os.handler.dispatchmessage
(handler.java:106) at android.os.looper.looponce (looper.java:230)

atroid.os.looper.loop (looper.java:319) at
atroid.os.looper.loop (loo /> android.app.activityThread.main (ActivityThread.java:8919) at
Java.lang.Reflect.method.invoke at
comm.Android.Internal.os.RuntimeInit$Methodandargscaller.run
(runtime.java: com.android.internal.os.zygoteinit.main
(zygoteinit.java:1103), вызванная
android.app.foregroundserviceStartNotAllowedException: < /strong> at
android.app.foregryservicestartexception $1.createfromprompromprompromprompromprompromprompromprompromprompromprompromprompromprompromprompromprompromprompromprompromprompromprompromprompromprompromprompromprompromprompromprompromprom. />(foregroundServiceStartNotAllowedException.java:54) at
android.app.foregroundServiceStartNotAllowedException$1.createFromParcel
(foregroundServiceStartNotAllowedException.java:50) at
android.os.parcel.ReadAlableException.java:50) at
android.os.те. /> android.os.parcel.readparcelable (parcel.java:4864) at
android.os.parcel.createexceptionornull (parcel.java:3064) at
at
android.os.parcel.readexception (parcel.java:2978) at
android.app.Activitymanager$stub $ proxy.setserviceforeground
(яковивность manage.java:7234) at android.pervice.startforegrographengre
androidx.core.app.servicecompat $api34impl.startforeground
(servicecompat.java:241) у
androidx.core.app.servicecompat.startforeground
(servicecompat.java:172) на />net.braun_home.sensoreRecording.sensorService.onstartCommand
(SensorService.java:549) < /strong> at
android.app.activityThread.handleServiceargs
(активность.>

Подробнее здесь: https://stackoverflow.com/questions/793 ... me-devices
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»