安卓四大組件之二——廣播接收器

1.時間廣播
2.電量廣播
3.網絡監聽廣播
動態監聽,
靜態監聽


import java.util.Calendar;

public class MainActivity extends AppCompatActivity {
    private IntentFilter intentFilter;
    private IntentFilter intentFilter2;
    private IntentFilter intentFilter3;
    private TimeChangeReceive timeChangeReceive;
    private NetworkChangeReceiver networkChangeReceiver;
    private BatteryBroadcast batteryBroadcast;
    private int m;
    private int n;
    private ImageView iv;
    Dialog dialog;
    LinearLayout linearLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //問一個可以嗎
        intentFilter=new IntentFilter();
        intentFilter2=new IntentFilter();
        //intentFilter3=new IntentFilter();
        intentFilter.addAction(Intent.ACTION_TIME_TICK);//每分鐘播報一次
        intentFilter.addAction(Intent.ACTION_TIME_CHANGED);//改變播報一次
        intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);//手機電量變化播報
        //intentFilter3.addAction(Intent.ACTION_BATTERY_CHANGED);//手機電量變化播報
        intentFilter2.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        timeChangeReceive=new TimeChangeReceive();
        batteryBroadcast=new BatteryBroadcast();
        networkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(timeChangeReceive,intentFilter);
        registerReceiver(batteryBroadcast,intentFilter);
        registerReceiver(networkChangeReceiver,intentFilter2);
        //registerReceiver(networkChangeReceiver,intentFilter3);


        linearLayout=findViewById(R.id.liner_del);
        iv=findViewById(R.id.iv_eye);

        final Calendar calendar = Calendar.getInstance();
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        if(hour>20||hour<=7){m=1;}//只有在兩個階段跨越的時候,改變屏幕亮度即可,不需要次次修改
        else m=0;

    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(timeChangeReceive);
        unregisterReceiver(networkChangeReceiver);
        unregisterReceiver(batteryBroadcast);
    }

//獲取屏幕當前亮度
    private int getScreenBrightness(Context context){
        ContentResolver contentResolver=context.getContentResolver();
        int defVal=125;
        return Settings.System.getInt(contentResolver,Settings.System.SCREEN_BRIGHTNESS,defVal);
    }
    //設置屏幕當前亮度
    private void setAppScreenBrightness(int brightessValue){
        Window window=getWindow();
        WindowManager.LayoutParams lp=window.getAttributes();
        lp.screenBrightness=brightessValue/255.0f;
        window.setAttributes(lp);
    }

    class NetworkChangeReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("網絡監聽廣播", "onReceive: ");
            if("android.net.conn.CONNECTIVITY_CHANGE".equals(intent.getAction())){
                ConnectivityManager connectivityManager= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();
                if(networkInfo!=null&&networkInfo.isAvailable()){
                    Toast.makeText(MainActivity.this,"network is available",Toast.LENGTH_LONG).show();
                }
                else
                    Toast.makeText(MainActivity.this,"network is unavailable",Toast.LENGTH_LONG).show();
            }

        }
    }


    class TimeChangeReceive extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("時間廣播", "onReceive: ");
            //廣播區分
            if (intent.ACTION_TIME_CHANGED.equals(intent.getAction()) || intent.ACTION_TIME_TICK.equals(intent.getAction())) {
                final Calendar calendar = Calendar.getInstance();
                int hour = calendar.get(Calendar.HOUR_OF_DAY);
                if((hour>20||hour<=7)&&m==1){
                    int i=getScreenBrightness(context);
                    setAppScreenBrightness(i/4);//設置背景亮度
                    m=0;
                    Toast.makeText(context,"晚間時刻,進入護眼模式",Toast.LENGTH_LONG).show();
                }
                if((hour<=20&&hour>7)&&m==0){
                    int i=getScreenBrightness(context);
                    setAppScreenBrightness(4*i);
                    Log.d(String.valueOf(i), "onReceive: ");
                    m=1;
                    Toast.makeText(context,"白天時刻,關閉護眼模式 come on!",Toast.LENGTH_LONG).show();
            }

            }


        }
    }
    class BatteryBroadcast extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("電量改變廣播" ,"onReceive: ");

            //判斷是否是電量變化的廣播
           if(Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())){
                float level=intent.getIntExtra("level",0);//獲取當前電量
                float scale=intent.getIntExtra("scale",0);
               float perscentage=(level/scale)*100;
                if(perscentage<=20){
                    linearLayout=findViewById(R.id.linearLayout);
                    linearLayout.setVisibility(View.VISIBLE);
                    Toast.makeText(MainActivity.this,"電量低於20%!!!", Toast.LENGTH_LONG).show();
               }else {
                    linearLayout=findViewById(R.id.linearLayout);
                    linearLayout.setVisibility(View.GONE);
                    Toast.makeText(MainActivity.this,"電量低於20%!!!", Toast.LENGTH_LONG).show();
                }

                //if(perscentage>20)
            }
        }
    }
    public void btn_cancle(View v){
        linearLayout.setVisibility(View.GONE);
    }
    public void btn_off(View v){
        final AlertDialog alertDialog=new AlertDialog.Builder(MainActivity.this).create();
        alertDialog.show();
        alertDialog.setContentView(R.layout.confirm_del);
        Window window =alertDialog.getWindow();
        window.setLayout(WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.WRAP_CONTENT);
        window.setGravity(Gravity.BOTTOM);
        window.findViewById(R.id.text_cancle).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                linearLayout.setVisibility(View.GONE);
                alertDialog.dismiss();
            }
        });
        window.findViewById(R.id.text_delete).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"數據流量已關閉,請及時充電", Toast.LENGTH_LONG).show();
                linearLayout.setVisibility(View.GONE);
                alertDialog.dismiss();
            }
        });
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章