第一行代码 5 全局广播-详解广播机制

 

第一行代码 5 全局广播-详解广播机制_第1张图片

第一行代码 5 全局广播-详解广播机制_第2张图片

第一行代码 5 全局广播-详解广播机制_第3张图片

第一行代码 5 全局广播-详解广播机制_第4张图片

 

public class MainActivity extends AppCompatActivity {

 private IntentFilter intentFilter;
 private NetworkChangeReceiver networkChangeReceiver;

 @Override
    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

        intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");                
        networkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver, intentFilter);

}


 protected void onDestroy() {
        super.onDestroy();
     unregisterReceiver(networkChangeReceiver);

    }
class NetworkChangeReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectionManager = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable()) {
Toast.makeText(context, "network is available",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "network is unavailable",
Toast.LENGTH_SHORT).show();
}

}

}

  

第一行代码 5 全局广播-详解广播机制_第5张图片

第一行代码 5 全局广播-详解广播机制_第6张图片

class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager connectionManager = (ConnectivityManager)
                getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isAvailable()) {
            Toast.makeText(context, "network is available",
                    Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(context, "network is unavailable",
                    Toast.LENGTH_SHORT).show();
        }

    }

  

第一行代码 5 全局广播-详解广播机制_第7张图片




    

 第一行代码 5 全局广播-详解广播机制_第8张图片

第一行代码 5 全局广播-详解广播机制_第9张图片

第一行代码 5 全局广播-详解广播机制_第10张图片

 

package com.example.broadcasttest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class BootCompleteReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Boot Complete", Toast.LENGTH_LONG).show();
    }

}

  

第一行代码 5 全局广播-详解广播机制_第11张图片

 

 




    
 
    
        
            
                

                
            
        

        
        
     

  

 

 第一行代码 5 全局广播-详解广播机制_第12张图片

1 给权限接受开机消息

2 指定开机消息是什么




    
    

    
        
            
                

                
            
        

        
            
                
            
        
       

  

第一行代码 5 全局广播-详解广播机制_第13张图片

第一行代码 5 全局广播-详解广播机制_第14张图片

第一行代码 5 全局广播-详解广播机制_第15张图片

第一行代码 5 全局广播-详解广播机制_第16张图片

 

 

package com.example.broadcasttest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show();
        abortBroadcast();
    }

}

  

 

  




   
    
        
            
                

                
            
        

        
            
                
            
        
    


  

 

 




    

  

第一行代码 5 全局广播-详解广播机制_第17张图片

发送全局广播

 

第一行代码 5 全局广播-详解广播机制_第18张图片

发送本地广播 LocalBroadcastManager

 

public class MainActivity extends AppCompatActivity {

  private IntentFilter intentFilter; //  触发

    private LocalReceiver localReceiver; // 接收器

    private LocalBroadcastManager localBroadcastManager;// 自定义本地发送器

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

  Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST");
                localBroadcastManager.sendBroadcast(intent); // 发送本地广播
            }
        });

  

  

第一行代码 5 全局广播-详解广播机制_第19张图片

第一行代码 5 全局广播-详解广播机制_第20张图片

 

 

第一行代码 5 全局广播-详解广播机制_第21张图片

第一行代码 5 全局广播-详解广播机制_第22张图片

 

 

 

package com.example.broadcasttest2;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class AnotherBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "received in AnotherBroadcastReceiver",
                Toast.LENGTH_SHORT).show();
    }

}

  

第一行代码 5 全局广播-详解广播机制_第23张图片

 

        
            
                
            
        

  

第一行代码 5 全局广播-详解广播机制_第24张图片

 

第一行代码 5 全局广播-详解广播机制_第25张图片

 

第一行代码 5 全局广播-详解广播机制_第26张图片

第一行代码 5 全局广播-详解广播机制_第27张图片

第一行代码 5 全局广播-详解广播机制_第28张图片

第一行代码 5 全局广播-详解广播机制_第29张图片

第一行代码 5 全局广播-详解广播机制_第30张图片

第一行代码 5 全局广播-详解广播机制_第31张图片

package com.example.broadcasttest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private IntentFilter intentFilter;

    private LocalReceiver localReceiver;

    private LocalBroadcastManager localBroadcastManager;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        localBroadcastManager = LocalBroadcastManager.getInstance(this); // 获取实例
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST");
                localBroadcastManager.sendBroadcast(intent); // 发送本地广播
            }
        });
        intentFilter = new IntentFilter();
        intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
        localReceiver = new LocalReceiver();
        localBroadcastManager.registerReceiver(localReceiver, intentFilter); // 注册本地广播监听器
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        localBroadcastManager.unregisterReceiver(localReceiver);
    }

    class LocalReceiver extends BroadcastReceiver {


        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "received local broadcast", Toast.LENGTH_SHORT).show();
        }

    }



}

  

 

第一行代码 5 全局广播-详解广播机制_第32张图片

第一行代码 5 全局广播-详解广播机制_第33张图片

第一行代码 5 全局广播-详解广播机制_第34张图片

第一行代码 5 全局广播-详解广播机制_第35张图片

 

第一行代码 5 全局广播-详解广播机制_第36张图片

 

  

package com.espressif.a5_1;

import android.app.Activity;

import java.util.ArrayList;


import java.util.List;

public class ActivityCollector {



    public static List activities = new ArrayList<>();



    public static void addActivity(Activity activity) {

        activities.add(activity);

    }



    public static void removeActivity(Activity activity) {

        activities.remove(activity);

    }



    public static void finishAll() {

        for (Activity activity : activities) {

            if (!activity.isFinishing()) {

                activity.finish();

            }

        }

    }



}

  

 

第一行代码 5 全局广播-详解广播机制_第37张图片

package com.espressif.a5_1;

/**
 * Created by dongdong on 2018/6/27.
 */

import android.support.v7.app.AppCompatActivity;


     import android.app.AlertDialog;
      import android.content.BroadcastReceiver;
        import android.content.Context;
        import android.content.DialogInterface;
        import android.content.Intent;
        import android.content.IntentFilter;
        import android.os.Bundle;


public class BaseActivity extends AppCompatActivity {



    private ForceOfflineReceiver receiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityCollector.addActivity(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.example.broadcastbestpractice.FORCE_OFFLINE");
        receiver = new ForceOfflineReceiver();
        registerReceiver(receiver, intentFilter);
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (receiver != null) {
            unregisterReceiver(receiver);
            receiver = null;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);
    }

    class ForceOfflineReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(final Context context, Intent intent) {
            AlertDialog.Builder builder = new AlertDialog.Builder(context);
            builder.setTitle("Warning");
            builder.setMessage("You are forced to be offline. Please try to login again.");
            builder.setCancelable(false);
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    ActivityCollector.finishAll(); // 销毁所有活动
                    Intent intent = new Intent(context, LoginActivity.class);
                    context.startActivity(intent); // 重新启动LoginActivity
                }
            });
            builder.show();
        }

    }

}

  

 

  

第一行代码 5 全局广播-详解广播机制_第38张图片




    
        

        
    

    
        

        
    

    

  

 

第一行代码 5 全局广播-详解广播机制_第39张图片

 

package com.espressif.a5_1;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class LoginActivity extends BaseActivity {

    private EditText accountEdit;

    private EditText passwordEdit;

    private Button login;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        accountEdit = (EditText) findViewById(R.id.account);
        passwordEdit = (EditText) findViewById(R.id.password);
        login = (Button) findViewById(R.id.login);
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String account = accountEdit.getText().toString();
                String password = passwordEdit.getText().toString();
                // 如果账号是admin且密码是123456,就认为登录成功
                if (account.equals("admin") && password.equals("123456")) {
                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                    startActivity(intent);
                    finish();
                } else {
                    Toast.makeText(LoginActivity.this, "account or password is invalid",
                            Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

}

  

 

第一行代码 5 全局广播-详解广播机制_第40张图片

 第一行代码 5 全局广播-详解广播机制_第41张图片

 

 




    

  

 

第一行代码 5 全局广播-详解广播机制_第42张图片

 

 

package com.espressif.a5_1;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;


public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button forceOffline = (Button) findViewById(R.id.force_offline);
        forceOffline.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("com.example.broadcastbestpractice.FORCE_OFFLINE");
                sendBroadcast(intent);
            }
        });
    }

}

  

 

 

第一行代码 5 全局广播-详解广播机制_第43张图片

 

package com.espressif.a5_1;

/**
 * Created by dongdong on 2018/6/27.
 */

import android.support.v7.app.AppCompatActivity;


     import android.app.AlertDialog;
      import android.content.BroadcastReceiver;
        import android.content.Context;
        import android.content.DialogInterface;
        import android.content.Intent;
        import android.content.IntentFilter;
        import android.os.Bundle;


public class BaseActivity extends AppCompatActivity {



    private ForceOfflineReceiver receiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityCollector.addActivity(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.example.broadcastbestpractice.FORCE_OFFLINE");
        receiver = new ForceOfflineReceiver();
        registerReceiver(receiver, intentFilter);
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (receiver != null) {
            unregisterReceiver(receiver);
            receiver = null;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);
    }

    class ForceOfflineReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(final Context context, Intent intent) {
            AlertDialog.Builder builder = new AlertDialog.Builder(context);
            builder.setTitle("Warning");
            builder.setMessage("You are forced to be offline. Please try to login again.");
            builder.setCancelable(false);
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    ActivityCollector.finishAll(); // 销毁所有活动
                    Intent intent = new Intent(context, LoginActivity.class);
                    context.startActivity(intent); // 重新启动LoginActivity
                }
            });
            builder.show();
        }

    }

}

  

第一行代码 5 全局广播-详解广播机制_第44张图片

第一行代码 5 全局广播-详解广播机制_第45张图片




    
        
        
        
            
                
                
            
        
    


  

第一行代码 5 全局广播-详解广播机制_第46张图片

第一行代码 5 全局广播-详解广播机制_第47张图片

 

 第一行代码 5 全局广播-详解广播机制_第48张图片第一行代码 5 全局广播-详解广播机制_第49张图片

 

 

第一行代码 5 全局广播-详解广播机制_第50张图片

 

转载于:https://www.cnblogs.com/kekeoutlook/p/9230257.html

你可能感兴趣的:(第一行代码 5 全局广播-详解广播机制)