gpt4 book ai didi

android - 为什么我在 Service 中发送通知时在 build() 中出现 NullPointerException?

转载 作者:太空狗 更新时间:2023-10-29 13:57:05 26 4
gpt4 key购买 nike

我想在服务中发送通知。但是,当我尝试使用以下代码发送通知时,它只会导致 java.lang.NullPointerException: Attempt to invoke interface method 'java.util.List android.os.IUserManager.getProfiles(int, boolean )' 在空对象引用上

我的问题是我可以使用以下代码创建通知和通知管理器,然后将其发送到我的Activity。但在我的服务中。使用服务时是否有一些特殊情况?我已经在 NotificationCompat.Builder(this) 中测试过 this 不为 null。

我想异常可能是 build() 中创建 NotificationCompat 时的应用程序上下文引起的?

以下是我的整个服务类。

package com.example.yang.backservice;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Intent;
import android.media.RingtoneManager;
import android.os.IBinder;
import android.support.v7.app.NotificationCompat;
import android.util.Log;

public class MyBackService extends Service {

@Override
public IBinder onBind(Intent intent) {
Log.d("onBind", "ServiceDemo onBind");
return null;
}

@Override
public void onCreate() {
Log.d("onCreate", "ServiceDemo onCreate");
super.onCreate();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("onStartCommand", "ServiceDemo onStartCommand");
super.onStartCommand(intent, flags, startId);

Notification notification = new NotificationCompat
.Builder(this)
.setTicker("Ticker")
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Title")
.setContentText("Text")
.setAutoCancel(true)
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.build();

NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(0, notification);

return START_STICKY;
}
}

然后我通过使用启动服务

Intent myBgService = new Intent(this, MyBackService.class);
startService(myBgService);

在我的主要 Activity 中。

我有

<service
android:name=".MyBackService"
android:exported="false"
android:isolatedProcess="true" />

在我的 AndroidManifest.xml 中

最佳答案

好吧,解决方案非常简单。只需删除 AndroidManifest.xml 中的 android:isolatedProcess="true"

我看到一个教程说如果我们想创建一个后台服务,我们必须在我们的 AndroidManifest.xml 中添加 android:isolatedProcess="true"。他错了。我们可以简单地在 public int onStartCommand(...) 中返回 START_STICKY

根据官方文档here ,如果 android:isolatedProcess 设置为 true,Android 会将其与系统的其余部分隔离。所以它无法发送通知。

关于android - 为什么我在 Service 中发送通知时在 build() 中出现 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38564183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com