首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启动时未启动服务

问启动时未启动服务
EN

Stack Overflow用户
提问于 2016-06-20 07:40:22
回答 1查看 59关注 0票数 0

enter code here试图启动该服务,但当服务第一次在应用程序启动期间完美地运行时,它并没有在引导时启动。

这是接收器,我想用开关的情况,因为有很多事情,我必须开始使用接收器。

代码语言:javascript
复制
 @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;
}
}

清单内容:-

代码语言:javascript
复制
<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>

服务等级

代码语言:javascript
复制
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;
    }
}

手动启动服务:

代码语言:javascript
复制
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);

(新界);

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-22 19:36:57

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

代码语言:javascript
复制
serviceIntent = new Intent(context, SmackService.class);
context.startService(serviceIntent);

在onStartCommand()中,您可以这样做:

代码语言:javascript
复制
email = intent.getExtras().getString("email");

由于Intent中没有“附加”,所以getExtras()返回null,然后在null引用上调用getString(),然后调用NullPointerException,导致Service崩溃。

故事到此结束。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37916975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档