Androidはネットワークの変化を傍受してページをリフレッシュします

4069 ワード

1.まずAndroidManifest.xmlに関連する権限を追加し、receiverのintent-filterを追加します.
"android.permission.ACCESS_NETWORK_STATE" />
...
"true"
    android:exported="true"
    android:name=".receiver.GlobalReceiver">
    
        "android.intent.action.BOOT_COMPLETED"/>
        "android.net.conn.CONNECTIVITY_CHANGE"/>
        ...
    

2.傍受ネットワークの変化
public class GlobalReceiver extends BroadcastReceiver {
    private final static String ACTION_NETWORK = "android.net.conn.CONNECTIVITY_CHANGE";
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(ACTION_NETWORK)) {
            //      ,       .
            refreshWhenNetChanged(context);
        }
    }

    private void refreshWhenNetChanged(Context context){
        boolean isOnline = false;
        ConnectivityManager connectManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeInfo = connectManager.getActiveNetworkInfo();
        //       , ConnectivityManager.TYPE_WIFI,       WiFi  .TYPE_      ,       .
        if (activeInfo != null) {
            isOnline = activeInfo.isConnected(); //      
        }
        if (isOnline) {
            ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            String runningActivity = activityManager.getRunningTasks(1).get(0).topActivity.getClassName();
            //       Activity  
            String contextActivity = runningActivity.substring(runningActivity.lastIndexOf(".") + 1);
            Log.i(TAG, "contextActivity:" + contextActivity);

            //         
            Intent intent = new Intent(context, xxx.class);
            //intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
            context.startActivity(intent);
        }
    }
}

このコードはreceiverにあるのでstartActivity用に新規intentを作成する場合、FLAGはFLAG_ACTIVITY_SINGLE_TOPまたはFLAG_ACTIVITY_CLEAR_TOPは無効です.エラー:Calling startActivity()from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag
3.adbで放送テストを送る~
adb shell am broadcast -a android.net.conn.CONNECTIVITY_CHANGE

(ADB放送、Activity/Serviceオフ)