可以通过做一个apk程序,在程序中加一个TextView控件。当手机(平板)横屏时提示系统处于landscape,竖屏时提示处于portrait。这样可以用来检测系统认为的方向跟设备真实的方向是否一致。步骤如下:
(1)XML中添加权限
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"></uses-permission>
(2)在XML中的activity属性中添加事件响应类型
<activity ... android:configChanges="orientation|keyboard|screenSize"> </activity>
(3)activity代码
package com.example.screenorientationtest; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.TextView; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.util.DisplayMetrics; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { private final String TAG = "OrientationTest"; private TextView textView; //显示控件 private int width; //系统认为的宽度 private int height; //系统认为的高度 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView)findViewById(R.id.textView2); Button button1 = (Button)findViewById(R.id.test); button1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); //后面两个函数所在的类不用import进去 width = dm.widthPixels; //获得系统宽度 height = dm.heightPixels; //获得系统高度 Log.i(TAG,"width is "+ width +"height is "+ height); if (width < height) { //如果是竖屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //旋转系统界面成横屏 } else { //如果是横屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //旋转系统界面成竖屏 } } }); } public void onConfigurationChanged(Configuration paramConfiguration){ //响应系统方向改变 if(paramConfiguration.orientation == 2) //横屏 textView.setText("横屏"); else textView.setText("竖屏"); super.onConfigurationChanged(paramConfiguration); //必有,否则运行会出现异常 } }
该APK可配合GSENSOR驱动使用。同时输出width/height可以用来确认系统原点方向的默认位置。
==========================================================================================================================
Notificateon是通过获取安卓系统的NotificationManager服务来实现的,它的用法在现在的一些客户端中用的很广泛,例如:网易新闻客户端以及短信功能、未接电话提示之类的都使用它来提示用户!以下的示例效果是点击按钮,然后通过Notification提示用户单击过按钮!注意需要导入的特殊类:
import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent;
按键监听的Listener如下:
final NotificationManager m_NotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); //或者状态栏通知服务 Button button = (Button)findViewById(R.id.callphone); button.setOnClickListener(new Button.OnClickListener() { public void onClick(View v){ Intent intent = new Intent(MainActivity.this,MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent appintent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0); Notification notification = new Notification(); notification.icon = R.drawable.ic_launcher; //图标的图片 notification.tickerText = "hello"; //滚动文本一闪而过的内容 notification.defaults = Notification.DEFAULT_SOUND; //带声音通知 notification.flags = Notification.FLAG_NO_CLEAR; //下拉状态栏后不会被"X"清掉 notification.setLatestEventInfo(MainActivity.this, "your title", "your text", appintent);//下拉后显示的详细文本 m_NotificationManager.notify(0, notification); } });
对应的,如果想取消掉状态栏图标的显示,用m_NotificationManager.cancelAll()就行了,如果该m_NotificationManager有管理了多个状态栏图标,那就用m_NotificationManager.cancel(0),其中0是你具体notify时的标号ID(自定义)。
PendingIntent 对象可以代表应用程序帮助在后面某个时候执行一个动作,而不用考虑应用程序是否在运行。形参可参见上述使用。
如果想在通知产生时,马达也震动,可在notify之前加上notification.vibrate= new long[]{100,250,100,500}。
参考原文:http://ikrboy.iteye.com/blog/1447856
参考原文:http://www.apkbus.com/android-68952-1-1.html