启动时服务未启动

Service not started while booting

enter code here正在尝试启动服务,但它没有在启动时启动,而服务在第一次启动应用程序时 运行 完美无缺。

这是接收器,我想使用开关盒,因为有很多东西我必须开始使用接收器。

 @Override
    public void onReceive(Context context, Intent intent) {
        Intent serviceIntent;
 switch (intent.getAction()) {
            case SmackService.NEW_MESSAGE:
                Log.i("TAG", "processMessage() BroadCast Recieve");
                break;
            case Intent.ACTION_BOOT_COMPLETED:
                Log.i("TAG", "Boot");
                Toast.makeText(context, "case", Toast.LENGTH_SHORT).show();
                    serviceIntent = new Intent(context, SmackService.class);
                    context.startService(serviceIntent);
                break;
}
}

清单内容:-

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name="com.example.abhishek.im.ChatReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="com.tlt.rx.msg" />
            </intent-filter>
        </receiver>

服务Class

public class SmackService extends Service {
  @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        user_data = new HashMap<>();
        if (intent != null && intent.hasExtra(BUNDLE_MSG_SYNC)) {
            doChatSync = intent.getBooleanExtra(BUNDLE_MSG_SYNC, false);
        }
        if (intent != null) {
            String email, password, name;
            email = intent.getExtras().getString("email");
            password = intent.getExtras().getString("password");
            name = intent.getExtras().getString("name");
            activity=intent.getExtras().getString("activity");
            user_data.put("email", email);
            user_data.put("password", password);
            user_data.put("name", name);
            start(user_data);
        }
        return Service.START_STICKY;
    }
}

手动启动服务:

Toast.makeText(MainActivity.this, "Signing in", Toast.LENGTH_LONG).show();
                    Intent intent = new Intent(MainActivity.this, SmackService.class);
                    intent.putExtra("email", email);
                    intent.putExtra("password", password);
                    intent.putExtra("name", name);
                    intent.putExtra("activity", "MainActivity");
                    startService(intent);

nt);

很清楚发生了什么。在启动时,您的 BroadcastReceiver 被调用。然后它像这样启动 Service

serviceIntent = new Intent(context, SmackService.class);
context.startService(serviceIntent);

onStartCommand()中,你这样做:

email = intent.getExtras().getString("email");

由于 Intent 中没有 "extras",getExtras() returns null 并且您在 [=17] 上调用 getString() =] 引用,然后抛出一个 NullPointerException,导致你的 Service 崩溃。

故事结束。