Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 广播接收器未触发(仅当设备重新启动时)_Android_Broadcastreceiver - Fatal编程技术网

Android 广播接收器未触发(仅当设备重新启动时)

Android 广播接收器未触发(仅当设备重新启动时),android,broadcastreceiver,Android,Broadcastreceiver,我在活动中创建了一个自定义接收器,用于连接internet时自动调用web服务。它工作正常,但我在下面的场景中遇到了问题 关闭我的internet连接 重新启动我的设备 打开我的申请 此时不调用OnReceive函数 代码如下 private BroadcastReceiver mConnReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, In

我在活动中创建了一个自定义接收器,用于连接internet时自动调用web服务。它工作正常,但我在下面的场景中遇到了问题

  • 关闭我的internet连接
  • 重新启动我的设备
  • 打开我的申请
  • 此时不调用OnReceive函数

    代码如下

     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();
        }
    }
    }