Java 从intent获取额外内容时出现问题:
我有以下广播接收器:Java 从intent获取额外内容时出现问题:,java,android,Java,Android,我有以下广播接收器: mRegistrationBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { System.out.println("onReceive"); final String token1 = i
mRegistrationBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("onReceive");
final String token1 = intent.getStringExtra("token");
System.out.println("onReceive" + token1);
Bundle extras = getIntent().getExtras();
if (extras != null) {
final String token = intent.getStringExtra("token");
System.out.println("Token fetched");
new PostLoginWithGCM(cleanKey, token).execute();
} else {
System.out.println("Token null");
}
}
};
输出为:
09-24 14:44:04.741 9103-9103/com.exa.exaCRM I/System.out: onReceive
09-24 14:44:04.741 9103-9103/com.exa.exaCRM I/System.out: onReceivefy6gmbUODWk:APA91bHf3PrCQmzZXnfR5LU40C7Mu1jhHenX8SvYR2OvQR6A3npXKa4NF8J-eZtHoxO7QAbTe_S94L8IttuU7ZrT5S97mucJb6EmmF92y3Hi60lrGb6cBfjDHj9fYDfaL8chion-Uyh5
09-24 14:44:04.741 9103-9103/com.exa.exaCRM I/System.out: Token null
因此,第一个System.out onReceive工作正常
第二个System.out为我提供了我传递的令牌值
最后,我检查我的附加值是否为空,令我惊讶的是,它说我的附加值为空,而我只是在空检查之前打印数据
这是负责生成令牌和本地广播的方法:
@Override
protected void onHandleIntent(Intent intent) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
try {
InstanceID instanceID = InstanceID.getInstance(this);
token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Log.i(TAG, "GCM Registration Token: " + token);
subscribeTopics(token);
sharedPreferences.edit().putBoolean(SessionManager.SENT_TOKEN_TO_SERVER, true).apply();
} catch (Exception e) {
Log.d(TAG, "Failed to complete token refresh", e);
sharedPreferences.edit().putBoolean(SessionManager.SENT_TOKEN_TO_SERVER, false).apply();
}
Intent registrationComplete = new Intent(SessionManager.REGISTRATION_COMPLETE);
System.out.println("token before assignment" + token);
registrationComplete.putExtra("token", token.toString());
LocalBroadcastManager.getInstance(this).sendBroadcast(registrationComplete);
}
在onReceive方法中,您已经有一个意图作为参数。 所以不是这个
Bundle extras = getIntent().getExtras();
试试这个
Bundle extras = intent.getExtras();
然而,我明白这两者有何不同?我想是的。你读错了额外的内容;)我正在研究将捆绑包作为额外值或将值作为额外值直接放入意图之间是否有区别。是的,这解决了问题,但我仍然不理解。我认为广播接收器总是等待呼叫,无论应用程序是否在前台运行。因此,广播接收器直接从应用程序获取意图。假设应用程序未在前台运行,则intent将变为nullgetIntent()。getExtras调用整个类的intent,而intent.getExtras从methods参数调用intent。