Android 广播接收器未触发(仅当设备重新启动时)
我在活动中创建了一个自定义接收器,用于连接internet时自动调用web服务。它工作正常,但我在下面的场景中遇到了问题Android 广播接收器未触发(仅当设备重新启动时),android,broadcastreceiver,Android,Broadcastreceiver,我在活动中创建了一个自定义接收器,用于连接internet时自动调用web服务。它工作正常,但我在下面的场景中遇到了问题 关闭我的internet连接 重新启动我的设备 打开我的申请 此时不调用OnReceive函数 代码如下 private BroadcastReceiver mConnReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, In
private BroadcastReceiver mConnReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
if (!noConnectivity) {
bar.setVisibility(View.VISIBLE);
callAuthorizeWebservice();
} else {
bar.setVisibility(View.INVISIBLE);
Toast.makeText(SplashScreenActivity.this, "Check Your Internet connection", Toast.LENGTH_LONG).show();
}
}
};
及
请帮助我解决此问题您似乎没有通过编程方式注册您的
广播接收器
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.BOOT_COMPLETED");
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(mConnReceiver , filter);
按程序创建的接收器需要按程序注册。如果以编程方式创建并在AndroidManifest
中输入条目,则不会激发该条目
希望这有帮助。在清单中添加以下权限以接收启动完成事件
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
现在定义MyBroadcastReceiver
-
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
if (!noConnectivity) {
bar.setVisibility(View.VISIBLE);
callAuthorizeWebservice();
} else {
bar.setVisibility(View.INVISIBLE);
Toast.makeText(SplashScreenActivity.this, "Check Your Internet connection", Toast.LENGTH_LONG).show();
}
}
}
我提到过这个@Override protected void onStart(){super.onStart();this.registerReceiver(this.mConnReceiver,new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));}但是当活动被销毁时,我像@Override protected void onStop()一样注销了接收器{super.onStop();取消注册接收器(mConnReceiver);}然后,您不应该创建BroadcastReceiver的内部类
。创建单独的类,然后在AndroidManifest.xml
中设置intentfilter。保持此代码不变,但为引导完成接收器创建单独的类,因为如果以编程方式注册,则无法接收引导完成设置单独的广播接收器,然后如何注销接收器(当应用程序关闭时)就像您现在所做的一样。创建该类的实例,在onStart中注册,在OnDestroyc中注销您可以发布您的AndroidManifest.xml吗?看起来缺少一些内容there@Ramesh您找到这个问题的解决方案了吗?如果我没有错的话,AndroidManifest.xml缺少权限条目?
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
if (!noConnectivity) {
bar.setVisibility(View.VISIBLE);
callAuthorizeWebservice();
} else {
bar.setVisibility(View.INVISIBLE);
Toast.makeText(SplashScreenActivity.this, "Check Your Internet connection", Toast.LENGTH_LONG).show();
}
}
}