启动时服务未启动
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
崩溃。
故事结束。
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
崩溃。
故事结束。