当从BroadCast发送意图时没有额外的空格
我有一个广播接收器可以检测应用程序是否连接到互联网,并发送带有额外字符串的意图。但是,我得到一个空超:当从BroadCast发送意图时没有额外的空格
这是广播接收器
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
final android.net.NetworkInfo wifi = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
final android.net.NetworkInfo mobile = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (wifi.isAvailable() || mobile.isAvailable()) {
context.sendBroadcast(new Intent().putExtra("cnx","yes"));
}
else{
context.sendBroadcast(new Intent().putExtra("cnx","no"));
}
}
}
,这我的活动代码:
networkChangeReceiver=new NetworkChangeReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String val=intent.getStringExtra("cnx");
Snackbar snackbar = Snackbar
.make(layoutLauncher, "Pas de connexion Internet!"+val, Snackbar.LENGTH_LONG);
snackbar.show();
/* if (val.equals("internet")){
isNetworkAvailable(false);
}
else{
isNetworkAvailable(true);
}*/
}
};
,这是注册码
private void registerNetworkBroadcast() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
registerReceiver(networkChangeReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
registerReceiver(networkChangeReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
}
这是清单的一部分
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="tn.formation.mdsoft.bulletinimmobilier">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application.....
<activity android:name=".ui.activities.LauncherActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".services.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service
android:name=".services.MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
<receiver android:name=".tools.NetworkChangeReceiver" >
</receiver>
意图是为了LauncherActivity。
编辑
的情况是无论如何故障,所以我忽略了它的实现,但在这种情况下,更好的验证密钥。
但我得到额外
空的Android不具有"internet"
或"cnx"
额外对Intent
。而且,你正在创造一个无限循环。
系统发送一个
CONNECTIVITY_ACTION
广播。您有两台接收机注册了该广播,并且都收到广播,没有
"internet"
或"cnx"
多余。一个接收器将
"cnx"
额外添加到CONNECTIVITY_ACTION
Intent
并发送广播。您有两个接收器注册该广播,并且都收到广播,
"cnx"
额外。一个接收器重新将
"cnx"
额外添加到CONNECTIVITY_ACTION
Intent
并发送广播。您有两个接收器注册该广播,并且都收到广播,
"cnx"
额外。一个接收器重新将
"cnx"
额外添加到CONNECTIVITY_ACTION
Intent
并发送广播。泡沫,漂洗,重复
首先,对于一个应用程序的一个单一的过程中沟通做不使用的系统广播。使用LocalBroadcastManager
。
二,做不是发送广播与系统Intent
行动。充其量,你搞砸了设备上的很多其他应用程序。最糟糕的是,你会崩溃,因为系统阻止你发送该广播。
而且,as Burhanuddin pointed out,您没有为您的额外使用相同的密钥。
能否请你解释一下:'首先,不要在应用程序的单个进程中使用系统广播进行通信。使用LocalBroadcastManager.'。为什么我们不应该使用它:)。 –
我改正了钥匙却没有任何东西,它是怎样的两个接收器?现在我正在从一项活动中接收它并从现在的所有活动中接收它,它是否仍算作系统广播? – MeknessiHamida
@MeknessiHamida您期望收到的事件BroadcastReceiver是一个系统调度事件,这意味着它不是您的应用程序广播它,而是Android操作系统它。你有两个接收者,因为你在清单中声明了一个,而在你的活动中声明了一个。 –
你的意图重点是不同的 在这里,你关键是 “CNX”
if (wifi.isAvailable() || mobile.isAvailable()) {
context.sendBroadcast(intent.putExtra("cnx","yes"));
}
else{
context.sendBroadcast(intent.putExtra("cnx","no"));
}
您可以通过 “互联网” 这里的关键
String val=intent.getStringExtra("internet");
将其更改为retriving:
String val=intent.getStringExtra("cnx");
你可以分享你的Androidmanifest.xml文件吗 –
所以你传递的关键'cnx的数据和获取'internet'。当然它将会是空的。 –
这就是我搞砸了几个更正后,即使使用正确的密钥它仍然为空 – MeknessiHamida