Android31_BroadcastReceiver及Notification

Notification及BroadcastReceiver
、Notification:
(一)、简介:
        显示在手机状态栏的通知。Notification所代表的是一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notification。
        Android3.0增加了Notification.Builder类,该类可以轻松地创建Notification对象。

Notification,俗称通知,是一种具有全局效果的通知,它展示在屏幕的顶端,首先会表现为一个图标的形式,当用户向下滑动的时候,展示出通知具体的内容。

  【注意:】因为一些Android版本的兼容性问题,对于Notification而言,Android3.0是一个分水岭,如果不考虑向下兼容的问题,构建Notification使用Notification.Builder构建,如果考虑到向下兼容性的问题,一般推荐使用 NotificationCompat.Builder构建( NotificationCompat类在v4包中:android.support.v4.app.NotificationCompat)。


通知一般通过 NotificationManager服务来发送一个Notification对象来完成,NotificationManager是一个重要的 系统级服务,该对象位于应用程序的框架层中,应用程序可以通过它像系统发送全局的通知。这个时候需要创建一个Notification对象,用于承载通知的内容。但是一般在实际使用过程中,一般不会直接构建Notification对象,而是使用它的一个内部类NotificationCompat.Builder来实例化一个对象(Android3.0之下使用Notification.Builder),并设置通知的各种属性,最后通过NotificationCompat.Builder.build()方法得到一个Notification对象。当获得这个对象之后,可以使用NotificationManager.notify()方法发送通知。

  NotificationManager类是一个通知管理器类,这个对象是由系统维护的服务,是以 单例模式获得,所以一般并不直接实例化这个对象。在Activity中,可以使用Activity.getSystemService(String)方法获取NotificationManager对象,Activity.getSystemService(String)方法可以通过Android系统级服务的句柄,返回对应的对象。在这里需要返回NotificationManager,所以直接传递Context.NOTIFICATION_SERVICE即可。

  虽然通知中提供了各种属性的设置,但是一个通知对象,有几个属性是必须要设置的,其他的属性均是可选的,必须设置的属性如下:

  • 小图标,使用setSamllIcon()方法设置。
  • 标题,使用setContentTitle()方法设置。
  • 文本内容,使用setContentText()方法设置。 

(二)、Notification.Builder类中提供的方法:
builder.setAutoCancel(); 设置点击通知后,状态栏自动删除通知。
builder.setSmallIcon(R.drawable.alert); 设置通知小图标
builder.setLargeIcon(R.drawable.alert2); 设置通知大图标
builder.setContentTitle("标题"); 设置通知标题
builder.setContentText("文本");  设置通知内容
builder.setDefaults(Notification.DEFAULT_SOUND
| Notification.DEFAULT_VIBRATE);  设置通知的音乐、振动、LED等。
builder.setSound();  设置通知的音乐
builder.setTicker();  设置通知在状态栏的提示文本。第一次提示消息的时候显示在通知栏上。
builder.setContentIntent();  设置点击通知后将要启动的程序组件对应的PendingIntent。

(三)、发送Notification的步骤:(四部曲)
1、调用getSystemService(NOTIFICATION_SERVICE)方法获取系统的NotificationManager服务,它是一个重要的系统服务。应用程序可以通过NotificationManager 向系统发送全局通知;
2、构造Notification.Builder对象;
3、设置Notification.Builder对象的各种属性;
4、通过NotificationManager notify()方法发送Notification。

(四)、示例代码:
核心代码如下:

publicvoid clickButton(View view) {
switch (view.getId()) {
case R.id.button_main_common:
Notification.Builder builder1 = new Notification.Builder(this);
builder1.setSmallIcon(R.drawable.ic_launcher);
builder1.setContentTitle("提示:");
builder1.setContentText("请注意休息,时间到了!");builder1.setAutoCancel(true);



Intent intent = new Intent(this, NextActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(this, 1, intent,
PendingIntent.FLAG_ONE_SHOT);
builder1.setContentIntent(pIntent);


nManager.notify(R.id.button_main_common, builder1.build());
break;
case R.id.button_main_bigpicture:
Notification.Builder builder2 = new Notification.Builder(this);
builder2.setSmallIcon(R.drawable.alert);
builder2.setContentTitle("提示:");
builder2.setContentText("以下是展示的大图片。。。");


Notification.BigPictureStyle bigStyle = new BigPictureStyle(builder2);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.big);
bigStyle.bigPicture(bitmap);
nManager.notify(R.id.button_main_bigpicture, bigStyle.build());


break;
case R.id.button_main_progress:
final Notification.Builder builder3 = new Notification.Builder(this);
builder3.setSmallIcon(R.drawable.alert);
builder3.setContentTitle("提示:");
builder3.setContentText("数据下载中。。。");


new Thread(new Runnable() {
@Override
publicvoid run() {
for (int i = 0; i <= 100; i += 5) {
builder3.setProgress(100, i, false);
nManager.notify(R.id.button_main_progress,
builder3.build());
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
builder3.setContentText("下载完毕!");
nManager.notify(R.id.button_main_progress, builder3.build());nManager.cancel(R.id.button_main_progress);
}
}).start();


break;
case R.id.button_main_clear:
nManager.cancelAll();
break;
}
}

(五)、PendingIntent:
1、PendingIntent字面意义:等待的,悬而未决的Intent;Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据,而Pendingintent,一般用在 Notification上,可以理解为延迟执行的intent,PendingIntent是对Intent一个包装;
2、得到一个 PendingIntent 对象,使用方法类的静态方法 getActivity(Context, int, Intent, int);
3、PendingIntent是一种特殊的Intent。主要的区别在于Intent是立刻执行,而 PendingIntent 的执行不是立刻,而是当条件满足后才发送企图,而且PendingIntent 可以取消
4、PendingIntent执行的操作实质上是参数传进来的Intent的操作,使用 PendingIntent 的目的在于它所包含的Intent的操作的执行是需要满足某些条件的。
5、主要的使用的地方和例子:通知Notificatio的发送,短消息SmsManager的发送和警报器AlarmManager的执行等。
        总而言之,PendingIntent就是一个可以在满足一定条件下执行的Intent,它相比于Intent的优势在于自己携带有Context对象,这样他就不必依赖于某个activity才可以存在。 


(六)、Intent和PendingIntent的区别:【掌握,以备面试之需】
  1.  Intent是立即使用的,而PendingIntent可以等到事件发生后触发,PendingIntent可以cancel
  2.  Intent在程序结束后即终止,而PendingIntent在程序结束后依然有效
  3.  PendingIntent自带Context,而Intent需要在某个Context内运行;
  4.  Intent在原task中运行,PendingIntent在新的task中运行。
(七)、PendingIntent的几个常量:(getActivity(Context, int, Intent, int)方法中的第四个参数
  1. FLAG_ONE_SHOT  : 这个PendingIntent只能使用一次。
  2. FLAG_NO_CREATE : 如果被描述的PendingIntent不存在,那么简单地返回null,而不是创建它。
  3. FLAG_CANCEL_CURRENT  :  如果被描述的PendingIntent已经存在,在即将生成一个新的PendingIntent前,当前的一个要被取消。
  4. FLAG_UPDATE_CURRENT  :如果被描述的PendingIntent已经存在,那么继续保持它,但它其中的数据会因为新Intent而更新。

广播简介:

(一)、广播传播机制:
广播接收器,也被称为全局事件,或系统事件
当Android系统中任何程序有动作时,如果想通知其他程序,采用广播的方式进行传播是非常有效的。广播从理论上说,可以将一个动作传播给任意多个程序(当然,广播接收器的数量会收到系统限制)。

在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理。这个广播跟我们传统意义中的电台广播有些相似之处。之所以叫做广播,就是因为它只负责“说”而不管你“听不听”,也就是不管你接收方如何处理。另外,广播可以被不只一个应用程序所接收,当然也可能不被任何应用程序所接收。
广播机制最大的特点就是发送方并不关心接收方是否接到数据,也不关心接收方是如何处理数据的。
Android中广播的是操作系统中产生的各种各样的事件。例如,收到一条短信就会产生一个收到短信息的事件。而Android操作系统一旦内部产生了这些事件,就会向所有的广播接收器对象来广播这些事件。

(二)、广播机制的三要素:

Android广播机制包含三个基本要素:
1、广播(Broadcast) - 用于发送广播;
2、广播接收器(BroadcastReceiver) - 用于接收广播;
3、意图内容(Intent)-用于保存广播相关信息的媒介。
Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的Broadcast进行过滤接受并响应的一类组件。


(三)、广播的生命周期:

1、广播接收器仅在它执行这个方法时处于活跃状态。当onReceive()返回后,它即为失活状态
2、拥有一个活跃状态的广播接收器的进程被保护起来而不会被杀死,但仅拥有失活状态组件的进程则会在其它进程需要它所占有的内存的时候随时被杀掉。
3、如果响应一个广播信息需要很长的一段时间,一般会将其纳入一个衍生的线程中去完成,而不是在主线程内完成它,从而保证用户交互过程的流畅。广播接收程序的时间限制为10秒

【备注:】
1、避免广播接收器里直接调用子线程:
        和在主线程里调用其它方法一样,应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。但不是在子线程里做这些任务(因为BroadcastReceiver的生命周期短),替代的是,如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个Service。
2、避免在广播接收器里启动一个Activity:
        因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。如果你的应用程序在响应广播接收器时需要向用户展示什么,应该使用Notification通知来实现。


三、 广播接收器BroadcastReceiver:
(一)、概念:
BroadcastReceiver(广播接收器)是为了实现系统广播而提供的一种组件,并且广播事件处理机制是系统级别的。比如,我们可以发出一种广播来测试是否收到短信,这时候就可以定义一个BraodcastReceiver来接受广播,当收到短信时提示用户。我们既可以用Intent来启动一个组件,也可以用sendBroadcast()方法发起一个系统级别的事件广播来传递消息。
我们也可以在自己的应用程序中开发BroadcastReceiver,然后把广播接收器这个类或者对象注册到Android操作系统上去,让操作系统知道现在有这样一个广播接收器正在等待接收Android操作系统的广播,即在自己的应用程序中实现BroadcastReceiver来监听和响应广播的Intent。
当有广播事件产生时,Android操作系统首先告诉注册到其上面的广播接收器产生了一个怎么样的事件,每个接收器首先判断是不是我这个接收器需要的事件,如果是它所需要的事件,再进行相应的处理。
例子,我们把骚扰电话的黑名单放到数据库中去,当接到电话时会产生一个接电话事件,事先在Android操作系统中注册一个BroadcastReceiver的对象,当产生事件的时候,会通知我们的广播接收器对象,接收器对象接收到消息之后,就会到数据库里面去取所有黑名单电话和接到的这个电话号码进行比较,如果匹配就直接挂掉。

(二)、 注册BroadcastReceiver的方法
BroadcastReceiver用于监听被广播的事件(Intent),为了达到这个目的,BroadcastReceiver必须进行注册,注册的方法有以下两种:
1、静态注册
静态注册方式是在AndroidManifest.xml的application里面定义receiver并设置要接收的action。
如果在清单配置文件中配置了广播接收器,那么程序在安装后会自动注册广播接收器。
静态注册方式的特点:不管该应用程序是否处于活动状态,都会进行监听


    
        
    
其中,MyReceiver为继承BroadcastReceiver的类,重写了onReceiver方法,并在onReceiver方法中对广播进行处理。标签设置过滤器,接收指定action广播。

2、动态注册
动态注册方式是在 activity 里面调用当前上下文对象的 registerReceiver() 方法   来注册,和静态的内容差不多。一个形参是receiver对象,另一个是IntentFilter对象。而IntentFilter构造方法的参数是要接收的action。
动态注册方式特点:在代码中进行注册后,当应用程序关闭后,就不再进行监听

MyReceiver receiver = new MyReceiver();
//创建过滤器,并指定action,使之用于接收同action的广播 IntentFilter filter = new IntentFilter("android.intent.action.PHONE_STATE"); //注册广播接收器 registerReceiver(receiver, filter);


 (三)、广播接收器的优先级:


(四)、发送广播:

// 指定广播目标Action Intent intent = new Intent("MyReceiver_Action"); // 可通过Intent携带消息 intent.putExtra("msg", "发送广播"); // 发送广播消息 sendBroadcast(intent);


(五)、注销BroadcastReceiver:
1、一般在onStart中注册BroadcastReceiver,在onStop中取消BroadcastReceiver。
2、一个BroadcastReceiver 对象只有在被调用onReceive(Context, Intent)时才有效,当从该函数返回后,该对象就无效的了,结束生命周期。

//注销广播接收器 unregisterReceiver(receiver);


四、接收系统广播:
广播接收器最大的用途就是接受系统发出的消息。例如:截获短信,截获来电等等。

(一)、短信拦截:
primary data user station  (PDUS  主数据用户站) Protocol Data Unit  ( 协议数据单元)
    public void onReceive(Context context, Intent intent) {
		Log.i(TAG, "==来短信了");
		// 获取短信的具体信息:短信发送号码,短信内容,短信发送时间
		Bundle bundle = intent.getExtras();
		Object[] pdus = (Object[]) bundle.get("pdus");
 
        
		SmsMessage[] smsMessage = new SmsMessage[pdus.length];
		for (int i = 0; i < pdus.length; i++) {
			smsMessage[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
		}
 
        
		String phoneNumber = smsMessage[0].getDisplayOriginatingAddress();
		StringBuilder sb = new StringBuilder();
		for (SmsMessage sms : smsMessage) {
			sb.append(sms.getDisplayMessageBody());
		}
		String content = sb.toString();
 
        
		Log.i(TAG, "==来短信了" + phoneNumber + ":" + content);
 
        
abortBroadcast();
	}


         
        
            android:name=".MySmsReceiver"
            android:enabled="true"
            android:exported="true" >
            
                SMS_RECEIVED" >
                
            
        




(二)、来去电监听:
	public void onReceive(Context context, Intent intent) {
		Log.i(TAG, "==电话状态改变了");
		TelephonyManager manager = (TelephonyManager) context
				.getSystemService(Service.TELEPHONY_SERVICE);
		Bundle bundle = intent.getExtras();
		// String phoneNumber0 = bundle
		// .getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
		phoneNumber = bundle.getString("incoming_number");
		prefs = context.getSharedPreferences("phonenumber",
				Context.MODE_PRIVATE);
		if (phoneNumber != null) {
			editor = prefs.edit();
			editor.putString("phoneNumber", phoneNumber);
			editor.commit();
		} else {
			phoneNumber = prefs.getString("phoneNumber", "");
		}
 
        
		int state = manager.getCallState();
		switch (state) {
		case TelephonyManager.CALL_STATE_RINGING:// 铃声响动
			Log.i(TAG, "==铃声响了" + phoneNumber);
			break;
		case TelephonyManager.CALL_STATE_OFFHOOK:// 电话接听
			Log.i(TAG, "==接听电话" + phoneNumber);
			break;
		case TelephonyManager.CALL_STATE_IDLE:// 挂电话了
			Log.i(TAG, "==电话挂了" + phoneNumber);
			break;
		default:
			break;
		}
 
        
	}


 
        
         
        
            android:name=".MyPhoneReceiver"
            android:enabled="true"
            android:exported="true" >
            
                PHONE_STATE" >
                
            
        


(三)、截获屏幕休眠与唤醒:
	public void onReceive(Context context, Intent intent) {
		if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
			Log.i(TAG, "==屏幕休眠了");
		}
 
        
		if (Intent.ACTION_SCREEN_ON.equals(intent.getAction())) {
			Log.i(TAG, "==屏幕唤醒了");
		}
	}


注册:】
ScreenOffOnReceiver myReceiver = new ScreenOffOnReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
registerReceiver(myReceiver, filter);
【备注:】屏幕唤醒和休眠广播只能在代码中注册,如果在清单配置文件中注册将不起作用


(四)、开机自动运行:
	public void onReceive(Context context, Intent intent) {
		Toast.makeText(context, "监听到开机了", Toast.LENGTH_LONG).show();
		Intent intent2 = new Intent(context, MainActivity.class);
		context.startActivity(intent2);
	}


         
        
            android:name=".LaunchReceiver"
            android:enabled="true"
            android:exported="true" >
            
                BOOT_COMPLETED" />
            
        


(五)、手机电池当前电量:
	public void onReceive(Context context, Intent intent) {
		Toast.makeText(context, "电量降低 ", Toast.LENGTH_LONG).show();
	}


         
        
            android:name=".BatteryReceiver"
            android:enabled="true"
            android:exported="true" >
            
                BATTERY_LOW" >
                
            
        


五、参考:【Android系统广播大全】
  1. String ADD_SHORTCUT_ACTION 动作:在系统中添加一个快捷方式。 
  2. String ALL_APPS_ACTION 动作:列举所有可用的应用。输入:无。 
  3. String ALTERNATIVE_CATEGORY 类别:说明 activity 是用户正在浏览的数据的一个可选操作。 
  4. String ANSWER_ACTION 动作:处理拨入的电话。 
  5. String BATTERY_CHANGED_ACTION 广播:充电状态,或者电池的电量发生变化。 
  6. String BOOT_COMPLETED_ACTION 广播:在系统启动后,这个动作被广播一次(只有一次)。 
  7. String BROWSABLE_CATEGORY 类别:能够被浏览器安全使用的 activities 必须支持这个类别。 
  8. String BUG_REPORT_ACTION 动作:显示 activity 报告错误。 
  9. String CALL_ACTION 动作:拨打电话,被呼叫的联系人在数据中指定。 
  10. String CALL_FORWARDING_STATE_CHANGED_ACTION 广播:语音电话的呼叫转移状态已经改变。 
  11. String CLEAR_CREDENTIALS_ACTION 动作:清除登陆凭证 (credential)。 
  12. String CONFIGURATION_CHANGED_ACTION 广播:设备的配置信息已经改变,参见 Resources.Configuration. 
  13. Creator CREATOR 无 无 
  14. String DATA_ACTIVITY_STATE_CHANGED_ACTION 广播:电话的数据活动(data activity)状态(即收发数据的状态)已经改变。 
  15. String DATA_CONNECTION_STATE_CHANGED_ACTION 广播:电话的数据连接状态已经改变。 
  16. String DATE_CHANGED_ACTION 广播:日期被改变。 
  17. String DEFAULT_ACTION 动作:和 VIEW_ACTION 相同,是在数据上执行的标准动作。 
  18. String DEFAULT_CATEGORY 类别:如果 activity 是对数据执行确省动作(点击, center press)的一个选项,需要设置这个类别。 
  19. String DELETE_ACTION 动作:从容器中删除给定的数据。 
  20. String DEVELOPMENT_PREFERENCE_CATEGORY 类别:说明 activity 是一个设置面板 (development preference panel). 
  21. String DIAL_ACTION 动作:拨打数据中指定的电话号码。 
  22. String EDIT_ACTION 动作:为制定的数据显示可编辑界面。 
  23. String EMBED_CATEGORY 类别:能够在上级(父)activity 中运行。 
  24. String EMERGENCY_DIAL_ACTION 动作:拨打紧急电话号码。 
  25. int FORWARD_RESULT_LAUNCH 启动标记:如果这个标记被设置,而且被一个已经存在的 activity 用来启动新的 activity,已有 activity 的回复目标 (reply target) 会被转移给新的 activity。 
  26. String FOTA_CANCEL_ACTION 广播:取消所有被挂起的 (pending) 更新下载。 
  27. String FOTA_INSTALL_ACTION 广播:更新已经被确认,马上就要开始安装。 
  28. String FOTA_READY_ACTION 广播:更新已经被下载,可以开始安装。 
  29. String FOTA_RESTART_ACTION 广播:恢复已经停止的更新下载。 
  30. String FOTA_UPDATE_ACTION 广播:通过 OTA 下载并安装操作系统更新。 
  31. String FRAMEWORK_INSTRUMENTATION_TEST_CATEGORY 类别:To be used as code under test for framework instrumentation tests. 
  32. String GADGET_CATEGORY 类别:这个 activity 可以被嵌入宿主 activity (activity that is hosting gadgets)。 
  33. String GET_CONTENT_ACTION 动作:让用户选择数据并返回。 
  34. String HOME_CATEGORY 类别:主屏幕 (activity),设备启动后显示的第一个 activity。 
  35. String INSERT_ACTION 动作:在容器中插入一个空项 (item)。 
  36. String INTENT_EXTRA 附加数据:和 PICK_ACTIVITY_ACTION 一起使用时,说明用户选择的用来显示的 activity;和 ADD_SHORTCUT_ACTION 一起使用的时候,描述要添加的快捷方式。 
  37. String LABEL_EXTRA 附加数据:大写字母开头的字符标签,和 ADD_SHORTCUT_ACTION 一起使用。 
  38. String LAUNCHER_CATEGORY 类别:Activity 应该被显示在顶级的 launcher 中。 
  39. String LOGIN_ACTION 动作:获取登录凭证。 
  40. String MAIN_ACTION 动作:作为主入口点启动,不需要数据。 
  41. String MEDIABUTTON_ACTION 广播:用户按下了“Media Button”。 
  42. String MEDIA_BAD_REMOVAL_ACTION 广播:扩展介质(扩展卡)已经从 SD 卡插槽拔出,但是挂载点 (mount point) 还没解除 (unmount)。 
  43. String MEDIA_EJECT_ACTION 广播:用户想要移除扩展介质(拔掉扩展卡)。 
  44. String MEDIA_MOUNTED_ACTION 广播:扩展介质被插入,而且已经被挂载。 
  45. String MEDIA_REMOVED_ACTION 广播:扩展介质被移除。 
  46. String MEDIA_SCANNER_FINISHED_ACTION 广播:已经扫描完介质的一个目录。 
  47. String MEDIA_SCANNER_STARTED_ACTION 广播:开始扫描介质的一个目录。 
  48. String MEDIA_SHARED_ACTION 广播:扩展介质的挂载被解除 (unmount),因为它已经作为 USB 大容量存储被共享。 
  49. String MEDIA_UNMOUNTED_ACTION 广播:扩展介质存在,但是还没有被挂载 (mount)。 
  50. String MESSAGE_WAITING_STATE_CHANGED_ACTION 广播:电话的消息等待(语音邮件)状态已经改变。 
  51. int MULTIPLE_TASK_LAUNCH 启动标记:和 NEW_TASK_LAUNCH 联合使用,禁止将已有的任务改变为前景任务 (foreground)。 
  52. String NETWORK_TICKLE_RECEIVED_ACTION 广播:设备收到了新的网络 "tickle" 通知。 
  53. int NEW_TASK_LAUNCH 启动标记:设置以后,activity 将成为历史堆栈中的第一个新任务(栈顶)。 
  54. int NO_HISTORY_LAUNCH 启动标记:设置以后,新的 activity 不会被保存在历史堆栈中。 
  55. String PACKAGE_ADDED_ACTION 广播:设备上新安装了一个应用程序包。 
  56. String PACKAGE_REMOVED_ACTION 广播:设备上删除了一个应用程序包。 
  57. String PHONE_STATE_CHANGED_ACTION 广播:电话状态已经改变。 
  58. String PICK_ACTION 动作:从数据中选择一个项目 (item),将被选中的项目返回。 
  59. String PICK_ACTIVITY_ACTION 动作:选择一个 activity,返回被选择的 activity 的类(名)。 
  60. String PREFERENCE_CATEGORY 类别:activity是一个设置面板 (preference panel)。 
  61. String PROVIDER_CHANGED_ACTION 广播:更新将要(真正)被安装。 
  62. String PROVISIONING_CHECK_ACTION 广播:要求 polling of provisioning service 下载最新的设置。 
  63. String RUN_ACTION 动作:运行数据(指定的应用),无论它(应用)是什么。 
  64. String SAMPLE_CODE_CATEGORY 类别:To be used as an sample code example (not part of the normal user experience). 
  65. String SCREEN_OFF_ACTION 广播:屏幕被关闭。 
  66. String SCREEN_ON_ACTION 广播:屏幕已经被打开。 
  67. String SELECTED_ALTERNATIVE_CATEGORY 类别:对于被用户选中的数据,activity 是它的一个可选操作。 
  68. String SENDTO_ACTION 动作:向 data 指定的接收者发送一个消息。 
  69. String SERVICE_STATE_CHANGED_ACTION 广播:电话服务的状态已经改变。 
  70. String SETTINGS_ACTION 动作:显示系统设置。输入:无。 
  71. String SIGNAL_STRENGTH_CHANGED_ACTION 广播:电话的信号强度已经改变。 
  72. int SINGLE_TOP_LAUNCH 启动标记:设置以后,如果 activity 已经启动,而且位于历史堆栈的顶端,将不再启动(不重新启动) activity。 
  73. String STATISTICS_REPORT_ACTION 广播:要求 receivers 报告自己的统计信息。 
  74. String STATISTICS_STATE_CHANGED_ACTION 广播:统计信息服务的状态已经改变。 
  75. String SYNC_ACTION 动作:执行数据同步。 
  76. String TAB_CATEGORY 类别:这个 activity 应该在 TabActivity 中作为一个 tab 使用。 
  77. String TEMPLATE_EXTRA 附加数据:新记录的初始化模板。 
  78. String TEST_CATEGORY 类别:作为测试目的使用,不是正常的用户体验的一部分。 
  79. String TIMEZONE_CHANGED_ACTION 广播:时区已经改变。 
  80. String TIME_CHANGED_ACTION 广播:时间已经改变(重新设置)。 
  81. String TIME_TICK_ACTION 广播:当前时间已经变化(正常的时间流逝)。 
  82. String UMS_CONNECTED_ACTION 广播:设备进入 USB 大容量存储模式。 
  83. String UMS_DISCONNECTED_ACTION 广播:设备从 USB 大容量存储模式退出。 
  84. String UNIT_TEST_CATEGORY 类别:应该被用作单元测试(通过 test harness 运行)。 
  85. String VIEW_ACTION 动作:向用户显示数据。 
  86. String WALLPAPER_CATEGORY 类别:这个 activity 能过为设备设置墙纸。 
  87. String WALLPAPER_CHANGED_ACTION 广播:系统的墙纸已经改变。 
  88. String WALLPAPER_SETTINGS_ACTION 动作:显示选择墙纸的设置界面。输入:无。 
  89. String WEB_SEARCH_ACTION 动作:执行 web 搜索。 
  90. String XMPP_CONNECTED_ACTION 广播:XMPP 连接已经被建立。 
  91. String XMPP_DISCONNECTED_ACTION 广播:XMPP 连接已经被断开。

良心的公众号,更多精品文章,不要忘记关注哈

《Android和Java技术栈》

你可能感兴趣的:(Android学习之路)