用onConfigurationChanged监控横竖屏改变 && 用Notification在状态栏提示图标

        可以通过做一个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

你可能感兴趣的:(用onConfigurationChanged监控横竖屏改变 && 用Notification在状态栏提示图标)