【发布时间】:2017-09-14 13:02:38
【问题描述】:
我有一个广播接收器,它检测应用程序是否连接到 Internet,并发送带有额外字符串的意图。但我得到一个空的额外:
这是广播接收器
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>
intent 用于 LauncherActivity。
编辑
无论如何,这个场景还是有问题的,所以我忽略了它的实现,但在这种情况下,最好验证密钥。
【问题讨论】:
-
你能分享你的Androidmanifest.xml文件吗
-
因此您使用密钥
cnx传递数据并使用internet获取数据。当然它会是空的。 -
经过几次更正后我搞砸了,即使使用正确的密钥它仍然为空
-
您的代码将无法在 Nougat 及更高版本上按预期工作,因为根据 API 文档,Manifest 声明的连接事件的 BroadcastReceivers 不会被触发。然后你重写在代码中手动注册的 NetworkChangeReceiver 的 onReceive 方法,所以你总是会得到一个 null 额外的,因为你实际上是连接接收器不会转发包含“是”或“否”的意图。
标签: android android-intent broadcastreceiver