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

来源:互联网 发布:手机淘宝营销中心 编辑:程序博客网 时间:2024/05/22 00:06

        可以通过做一个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可以用来确认系统原点方向的默认位置。

================用Notification在状态栏提示图标=====================

        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

原创粉丝点击