android 常用功能的切换(wifi开关,蓝牙开关,飞行模式切换,响铃模式切换,亮度切换)

我们在市场上经常可以看到,可以切换蓝牙,wifi, 飞行模式等等功能的小部件,由于工作需要,我也把相应的功能实现了一下

有需要的朋友,避免走弯路,可以参考下面代码,也可以到

http://download.csdn.net/detail/c_weibin/4142010

下载完整项目


这里直接将源码贴出


package com.bpi.launcher.view;

import android.app.Activity;
import android.app.PendingIntent;
import android.app.PendingIntent.CanceledException;
import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.media.AudioManager;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import android.widget.RelativeLayout.LayoutParams;

import com.bpi.launcher.R;

public class ToggleToolWidget extends LinearLayout implements OnClickListener{
	
	
	/** Called when the activity is first created. */
	protected ImageView iv_bluetooth = null;//蓝牙
	protected ImageView iv_wifi = null;//wifi
	protected ImageView iv_sound = null;//声音
	protected ImageView iv_brightness = null;//亮度
	protected ImageView iv_flymodel = null;//飞行模式
	protected ImageView iv_gps = null;//GPS
	
	protected BluetoothAdapter adapter = null;
	protected WifiManager wifiManager = null;
	protected AudioManager audioManager = null;
	protected LocationManager locationManager=null;
	
	
	protected final static int mostBrightness=255;//最亮
	protected final static int moreBrightness=150;//较亮
	protected final static int lowBrightness=50;//最暗
	View linearLayout=null;
	public ToggleToolWidget(Context context) {
		
		super(context);
		LayoutInflater inflater=LayoutInflater.from(getContext());
		View linearLayout=inflater.inflate(R.layout.toggle_tool, null);
		this.addView(linearLayout);
		this.setGravity(LinearLayout.HORIZONTAL|LinearLayout.VERTICAL);
		//this.setLayoutParams(layoutParams);
		
		/**初始化有关蓝牙的信息**/
		adapter = BluetoothAdapter.getDefaultAdapter();
		iv_bluetooth = (ImageView) findViewById(R.id.bluetooth);//蓝牙
		iv_bluetooth.setOnClickListener(this);
		IntentFilter intentFilter = new IntentFilter(
				android.bluetooth.BluetoothAdapter.ACTION_STATE_CHANGED);
		getContext().registerReceiver(new BluetoothBroadcastReceiver(), intentFilter);//注册监听器
		changeBluetoothImage();

		/**初始化有关wifi的信息**/
		wifiManager = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE);
		iv_wifi = (ImageView) findViewById(R.id.wifi);
		iv_wifi.setOnClickListener(this);
		IntentFilter wifiIntentFilter = new IntentFilter(
				android.net.wifi.WifiManager.WIFI_STATE_CHANGED_ACTION);
		getContext().registerReceiver(new WifiBroadcastReceiver(), wifiIntentFilter);
		changeWifiImage();

		/**初始化声音信息**/
		audioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
		iv_sound = (ImageView) findViewById(R.id.sound);
		iv_sound.setOnClickListener(this);
		changeRingerModeImage();
		IntentFilter soundIntentFilter = new IntentFilter(
				android.media.AudioManager.RINGER_MODE_CHANGED_ACTION);
		getContext().registerReceiver(new RingerModeBrocastReceiver(),
				soundIntentFilter);

		/**初使化亮度信息**/
		iv_brightness = (ImageView) findViewById(R.id.brightness);
		iv_brightness.setOnClickListener(this);
		changeBrinessImage();
		

		/**飞行模式**/
		iv_flymodel = (ImageView) findViewById(R.id.flymodel);
		iv_flymodel.setOnClickListener(this);
		IntentFilter airPlaneIntentFilter = new IntentFilter(
				Intent.ACTION_AIRPLANE_MODE_CHANGED);
		getContext().registerReceiver(new AirPlaneBrocastReceiver(), airPlaneIntentFilter);
		changeAirPlaneImage();

		/**初使化GpS信息**/
		iv_gps = (ImageView) findViewById(R.id.gps);
		iv_gps.setOnClickListener(this);
		locationManager=(LocationManager) getContext().getSystemService(getContext().LOCATION_SERVICE);
		locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0.0F, new GPSListener());
		if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){//初始化显示的图片
			iv_gps.setImageResource(R.drawable.gps_on);
		}else{
			iv_gps.setImageResource(R.drawable.gps_off);
		}
	}


	@Override
	public void onClick(View v) {

		if (v.getId() == R.id.bluetooth) {//点击蓝牙图标
			if (adapter.getState() == BluetoothAdapter.STATE_OFF) {
				adapter.enable();
			} else if (adapter.getState() == BluetoothAdapter.STATE_ON) {
				adapter.disable();
			}
		} else if (v.getId() == R.id.wifi) {//点击wifi图标
			wifiManager.setWifiEnabled(!wifiManager.isWifiEnabled());

		} else if (v.getId() == R.id.sound) {//点击响铃方式
			int ringerMode = audioManager.getRingerMode();

			if (ringerMode == AudioManager.RINGER_MODE_NORMAL) {//正常时点击后变振动			
				audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
				//Toast.makeText(this, "振动", 0).show();
			} else if (ringerMode == AudioManager.RINGER_MODE_VIBRATE) {//振动时点击后变静音

				audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
				//Toast.makeText(this, "静音", 0).show();
			} else if (ringerMode == AudioManager.RINGER_MODE_SILENT) {//静音时点击后变正常

				audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
				//Toast.makeText(this, "正常", 0).show();
			}
		} else if (v.getId() == R.id.brightness) {//点击亮度 
			
			//设置当前屏幕的亮度
		
			try {
				int currentBrightness=Settings.System.getInt(getContext().getContentResolver(),Settings.System.SCREEN_BRIGHTNESS);
				
				currentBrightness=getNearestNumber(currentBrightness, mostBrightness,moreBrightness,lowBrightness);
				if(currentBrightness==mostBrightness){
					currentBrightness=moreBrightness;
					iv_brightness.setImageResource(R.drawable.brightness_auto);
				}else if(currentBrightness==moreBrightness){
					currentBrightness=lowBrightness;
					iv_brightness.setImageResource(R.drawable.brightness_low);
				}else {
					iv_brightness.setImageResource(R.drawable.brightness_most);
					currentBrightness=mostBrightness;
				}
				//设置当前Activity的亮度
				WindowManager.LayoutParams lp = ((Activity)getContext()).getWindow().getAttributes();
				lp.screenBrightness=currentBrightness/255f;
				((Activity)getContext()).getWindow().setAttributes(lp);
				
				//设置整个手机的亮度
				Settings.System.putInt(getContext().getContentResolver(),Settings.System.SCREEN_BRIGHTNESS, currentBrightness);
				
			} catch (SettingNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			};

			
		} else if (v.getId() == R.id.flymodel) {
			//取得目前飞行模式的状态
			boolean isAirPlaneOn;
			try {
				isAirPlaneOn = Settings.System.getInt(getContext().getContentResolver(),
						Settings.System.AIRPLANE_MODE_ON) == 1 ? true : false;

				setAirplaneMode(!isAirPlaneOn);
			} catch (SettingNotFoundException e) {
				e.printStackTrace();
			}
		} else if (v.getId() == R.id.gps) {
			
			toggleGPS();
		}
	}

	/**
	 * 改变亮度图片
	 * 
	 * 陈伟斌
	 * 2012-2-18
	 */
	protected void changeBrinessImage(){
		
		int currentBrightness;
		try {
			currentBrightness = Settings.System.getInt(getContext().getContentResolver(),Settings.System.SCREEN_BRIGHTNESS);
			currentBrightness=getNearestNumber(currentBrightness, mostBrightness,moreBrightness,lowBrightness);
			if(currentBrightness==mostBrightness){
				iv_brightness.setImageResource(R.drawable.brightness_most);
			}else if(currentBrightness==moreBrightness){
				iv_brightness.setImageResource(R.drawable.brightness_auto);
			}else {
				iv_brightness.setImageResource(R.drawable.brightness_low);
			}
		} catch (SettingNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	/**
	 * 改变蓝牙切换按钮的图片
	 * 陈伟斌
	 * 2012-2-9
	 */
	protected void changeBluetoothImage() {

		int blueState = adapter.getState();
		if (blueState == BluetoothAdapter.STATE_ON) {//打开蓝牙
			iv_bluetooth.setImageResource(R.drawable.bluetooth_on);
		} else if (blueState == BluetoothAdapter.STATE_OFF) {//关闭蓝牙
			iv_bluetooth.setImageResource(R.drawable.bluetooth_off);
		} else if (blueState == BluetoothAdapter.STATE_TURNING_OFF
				|| blueState == BluetoothAdapter.STATE_TURNING_ON) {//正在打开蓝牙或正在关闭蓝牙
			iv_bluetooth.setImageResource(R.drawable.bluetooth_ing);
		}
	}

	/**
	 *  改变wifi切换按钮的图片
	 * 
	 * 陈伟斌
	 * 2012-2-9
	 */
	protected void changeWifiImage() {
		int wifiState = wifiManager.getWifiState();
		if (wifiState == WifiManager.WIFI_STATE_DISABLED) {//关闭
			iv_wifi.setImageResource(R.drawable.wifi_disabled);
		} else if (wifiState == WifiManager.WIFI_STATE_ENABLED) {//可用
			iv_wifi.setImageResource(R.drawable.wifi_enabled);
		} else if (wifiState == WifiManager.WIFI_STATE_DISABLING
				|| wifiState == WifiManager.WIFI_STATE_ENABLING) {//正在打开wifi或正在关闭wifi
			iv_wifi.setImageResource(R.drawable.wifi_enabling);
		}
	}

	/**
	 *  改变ringerMode切换按钮的图片
	 * 
	 * 陈伟斌
	 * 2012-2-9
	 */
	protected void changeRingerModeImage() {
		int ringerMode = audioManager.getRingerMode();

		if (ringerMode == AudioManager.RINGER_MODE_NORMAL) {//正常	

			iv_sound.setImageResource(R.drawable.sound_on);
		} else if (ringerMode == AudioManager.RINGER_MODE_SILENT) {//静音

			iv_sound.setImageResource(R.drawable.sound_off);
		} else if (ringerMode == AudioManager.RINGER_MODE_VIBRATE) {//振动

			iv_sound.setImageResource(R.drawable.vibration);

		}
	}

	protected void changeAirPlaneImage() {
		try {
			boolean isAirPlaneOn = Settings.System.getInt(getContext().getContentResolver(),
					Settings.System.AIRPLANE_MODE_ON) == 1 ? true : false;
			if (isAirPlaneOn) {
				iv_flymodel.setImageResource(R.drawable.fly_model_on);
			} else {
				iv_flymodel.setImageResource(R.drawable.fly_model_off);

			}
		} catch (SettingNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	/**
	 * 传入若干个数,取得最接近destNumber的数
	 * @param numbers
	 * @return
	 * 陈伟斌
	 * 2012-2-10
	 */
	private int getNearestNumber(int destNumber,int...numbers){
		int diffValue=Integer.MAX_VALUE;
		int nearestNumber=numbers[0];
		for (int i = 0; i < numbers.length; i++) {
			System.out.println(diffValue+"   "+Math.abs(destNumber-numbers[i]));
			if(diffValue>Math.abs(destNumber-numbers[i])){
				diffValue=Math.abs(destNumber-numbers[i]);
				nearestNumber=numbers[i];
			}
			
		}
		return nearestNumber;
	}
	/**
	 * 改变飞行模式
	 * @param setAirPlane
	 * 陈伟斌
	 * 2012-2-10
	 */
	private void setAirplaneMode(boolean setAirPlane) {

		Settings.System.putInt(getContext().getContentResolver(),
				Settings.System.AIRPLANE_MODE_ON, setAirPlane ? 1 : 0);

		Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
		intent.putExtra("state", setAirPlane);//平板没加这句话不起作用

		getContext().sendBroadcast(intent);


	}
	/**
	 * 切换GPS状态
	 * 
	 * 陈伟斌
	 * 2012-2-10
	 */
	private void toggleGPS() {
		
		Intent gpsIntent = new Intent();
		gpsIntent.setClassName("com.android.settings",
				"com.android.settings.widget.SettingsAppWidgetProvider");
		gpsIntent.addCategory("android.intent.category.ALTERNATIVE");
		gpsIntent.setData(Uri.parse("custom:3"));
		try {
			PendingIntent.getBroadcast(getContext(), 0, gpsIntent, 0).send();
		}
		catch (CanceledException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 
	 * 项目名称:ToolWidget   
	 * 类名称: SettingBroadcastReceiver 
	 * 类描述:蓝牙广播接收器
	 * 创建人:陈伟斌  
	 * 创建时间:2012-2-9  下午02:45:49      
	 *
	 */
	class BluetoothBroadcastReceiver extends BroadcastReceiver {

		@Override
		public void onReceive(Context context, Intent intent) {
			if (iv_bluetooth == null) {
				return;
			}
			changeBluetoothImage();

		}
	}

	/**
	 * 
	 * 项目名称:ToolWidget   
	 * 类名称: WifiBroadcastReceiver 
	 * 类描述:wifi广播接收器
	 * 创建人:陈伟斌  
	 * 创建时间:2012-2-10  上午11:43:41      
	 *
	 */
	class WifiBroadcastReceiver extends BroadcastReceiver {

		@Override
		public void onReceive(Context context, Intent intent) {
			changeWifiImage();

		}
	}

	/**
	 * 
	 * 项目名称:ToolWidget   
	 * 类名称: RingerModeBrocastReceiver 
	 * 类描述:响铃模式
	 * 创建人:陈伟斌  
	 * 创建时间:2012-2-10  上午11:44:00      
	 *
	 */
	class RingerModeBrocastReceiver extends BroadcastReceiver {

		@Override
		public void onReceive(Context context, Intent intent) {
			changeRingerModeImage();

		}

	}

	/**
	 * 
	 * 项目名称:ToolWidget   
	 * 类名称: AirPlaneBrocastReceiver 
	 * 类描述:飞行模式广播接收器
	 * 创建人:陈伟斌  
	 * 创建时间:2012-2-10  上午11:45:00      
	 *
	 */
	class AirPlaneBrocastReceiver extends BroadcastReceiver {

		@Override
		public void onReceive(Context arg0, Intent arg1) {
			changeAirPlaneImage();

		}
		
	}
	/**
	 * 
	 * 项目名称:ToolWidget   
	 * 类名称: GPSListener 
	 * 类描述:GPS状态监听
	 * 创建人:陈伟斌  
	 * 创建时间:2012-2-10  下午03:04:19      
	 *
	 */
	class GPSListener implements LocationListener{

		@Override
		public void onLocationChanged(Location location) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void onProviderDisabled(String provider) {
			iv_gps.setImageResource(R.drawable.gps_off);


		}

		@Override
		public void onProviderEnabled(String provider) {
			iv_gps.setImageResource(R.drawable.gps_on);
		}

		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {
			// TODO Auto-generated method stub
			
		}
		
	}
}

配置文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/switchbar_background"
    android:gravity="center_vertical|center_horizontal"
    android:layout_gravity="center_vertical|center_horizontal"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/bluetooth"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10px"
        android:layout_weight="1"
        android:src="@drawable/bluetooth_on" />

    <ImageView
        android:id="@+id/brightness"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10px"
        android:layout_weight="1"
        android:src="@drawable/brightness_most" />

    <ImageView
        android:id="@+id/sound"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10px"
        android:layout_weight="1"
        android:src="@drawable/sound_on" />

    <ImageView
        android:id="@+id/wifi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10px"
        android:layout_weight="1"
        android:src="@drawable/wifi_enabled" />

    <ImageView
        android:id="@+id/flymodel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10px"
        android:layout_weight="1"
        android:src="@drawable/fly_model_off" />

    <ImageView
        android:id="@+id/gps"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10px"
        android:layout_weight="1"
        android:src="@drawable/gps_on" />

</LinearLayout>
源码下载: http://download.csdn.net/detail/c_weibin/4142010

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C_Wayne

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值