第三课:获取系统设备的状态,以及系统设备状态改变事件处理

android提供了一个Configuration类,主要用来描述与能让应用程序获取的资源相关的所有硬件配置信息。包含用户指定的信息项(本地和缩放比例)和动态硬件配置(一系列的输入设备)。

Configuration 类中包含了很多种信息,例如系统字体大小,orientation,输入设备类型等等。

public float fontScale:获取当前用户设置的字体的缩放因子。

public int keyboard:获取当前设备所关联的键盘类型。该属性可能返回如下值:KEYBOARD_NOKEYS、KEYBOARD_QWERTY(普通电脑键盘)、KEYBOARD_12KEY(只有12个键的小键盘)。

public int keyboardHidden:该属性返回一个boolean值用于标识当前键盘是否可用。KEYBOARDHIDDEN_NO(软键盘或者硬件键盘可用)、KEYBOARDHIDDEN_YES:两个键盘都不可用。

public Locale locale:获取当前用户的locale。

public int mcc:获取移动信号的国家码。

public int mnc:获取移动信号的网络码。

public int navigation:判断系统上方向导航设备的类型。该属性可返回:NAVIGATION_NONAV(无导航)、NAVIGATION_DPAD(DPAD导航)、

NAVIGATION_TRACKBALL(轨迹球导航)、NAVIGATION_WHEEL(滚轮导航)等属性值。

public int orientation:获取系统屏幕的方向。该属性返回:ORIENTATION_LANDSCAPE(横向屏幕)、ORIENTATION_PORTRAIT(竖向屏幕)、ORIENTATION_SQUARE(方形屏幕)等属性值。

public int touchscreen:获取系统触摸屏的触摸方式。该属性值返回:TOUCHSCREEN_NOTOUCH(无触摸屏)、TOUCHSCREEN_STYLUS(触摸笔式的触摸屏)、TOUCHSCREEN_FINGER(接受手指的触摸屏)。


注:必须在需要监控的activity中的标签写下用户监听标签:

android:configChanges="orientation"


例1.获取系统设备状态

ConfigurationTest.java

public class ConfigurationTest extends Activity
{
	EditText ori;
	EditText navigation;
	EditText touch;
	EditText mnc;
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 获取应用界面中的界面组件
		ori = (EditText)findViewById(R.id.ori);
		navigation = (EditText)findViewById(R.id.navigation);
		touch = (EditText)findViewById(R.id.touch);
		mnc = (EditText)findViewById(R.id.mnc);
		Button bn = (Button)findViewById(R.id.bn);
		bn.setOnClickListener(new OnClickListener()
		{
			// 为按钮绑定事件监听器
			@Override
			public void onClick(View source)
			{
				// 获取系统的Configuration对象
				Configuration cfg = getResources().getConfiguration();
				String screen = cfg.orientation ==
					Configuration.ORIENTATION_LANDSCAPE 
					? "横向屏幕": "竖向屏幕";
				String mncCode = cfg.mnc + "";
				String naviName = cfg.orientation ==
					Configuration.NAVIGATION_NONAV
					? "没有方向控制" :
					cfg.orientation == Configuration.NAVIGATION_WHEEL
					? "滚轮控制方向" :
					cfg.orientation == Configuration.NAVIGATION_DPAD
					? "方向键控制方向" : "轨迹球控制方向";
				navigation.setText(naviName);
				String touchName = cfg.touchscreen == 
					Configuration.TOUCHSCREEN_NOTOUCH
					? "无触摸屏" : "支持触摸屏";
				ori.setText(screen);
				mnc.setText(mncCode);
				touch.setText(touchName);
			}
		});
	}
}

如果程序需要监听系统设置的更高,则可以考虑重写Activity的onConfigurationChanged(Configuration newConfig)方法,该方法是一个基于回调的事件处理方法:当系统设置发生更改时,该方法会被自动触发。

例2:监听屏幕方向的改变

ChangeCfg.java

public class ChangeCfg extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button bn = (Button) findViewById(R.id.bn);
		// 为按钮绑定事件监听器
		bn.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View source)
			{
				Configuration config = getResources().getConfiguration();
				// 如果当前是横屏
				if (config.orientation == Configuration.ORIENTATION_LANDSCAPE)
				{
					// 设为竖屏
					ChangeCfg.this.setRequestedOrientation(
						ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
				}
				// 如果当前是竖屏
				if (config.orientation == Configuration.ORIENTATION_PORTRAIT)
				{
					// 设为横屏
					ChangeCfg.this.setRequestedOrientation(
						ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
				}
			}
		});
	}

	// 重写该方法,用于监听系统设置的更改,主要是监控屏幕方向的更改
	@Override
	public void onConfigurationChanged(Configuration newConfig)
	{
		super.onConfigurationChanged(newConfig);
		String screen = newConfig.orientation ==
			Configuration.ORIENTATION_LANDSCAPE ? "横向屏幕" : "竖向屏幕";
		Toast.makeText(this, "系统的屏幕方向发生改变" + "\n修改后的屏幕方向为:"
			+ screen, Toast.LENGTH_LONG).show();
	}
}

源代码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值