Intent 构造方式:
1. Intent(String action) 2. Intent(String action,Uri uri) 3. Intent(Context context,Class anyclass)
通过Intent可以启动Activity、Service,或者发送广播:
startActivity(Intent intent),startService(Intent intent),sendBroadcast(Intent intent)
例如直接打电话的方法如下:
Intent intent = new Intent("android.intent.action.CALL", Uri.parse("tel:" + "10086"));
startActivity(intent); //需要加上"android.permission.CALL_PHONE"权限
另外,使用intent还可以传递参数:
Activity1: Activity2:
Intent intent = new Intent(Activity1.this,Activity2.this); Bundle bundle = getIntent().getExtras();
intent.putExtra("NAME","taiwan1934"); String name = bundle.getString("NAME");
intent.putExtra("NUM",1934); Long num = bundle.getLong("NUM");
Bundle bundle = new Bundle();
bundle.putString("ADDR","shanghai"); String addr = bundle.getString("ADDR");
intent.putExtras(bundle);
startActivity(intent);
在Activity1里使用putExtra(String key, ``` value)以及putExtras(bundle),最终都会放在一个bundle里
IntentFilter与BroadcastReceiver
IntentFilter(String action),IntentFilter可以通过addAction(String action)不断添加任何想接收的Broadcast
Broadcast的接收处理:
public class MyReceiver extends BroadcastReceiver{
private static final String SMS_ACTION = "android.provider.telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context,Intent intent){
String action = intent.getAction();
if(action.equals(SMS_ACTION)){
/*deal with this broadcast*/
}
}
}
IntentFilter mFilter = new IntentFilter();
//IntentFilter mFilter = new IntentFilter(SMS_ACTION);
mFilter.addAction(SMS_ACTION);
private MyReceiver mReceiver = new MyReceiver();
registerReceiver(mReceiver,mFilter);
unregisterReceiver(mReceiver);
可以自己发送广播,系统也会发送各种广播,如开机广播:“android.intent.action.BOOT_COMPLETED”
PendingIntent创建方式:
1. static PendingIntent getActivity(Context context,int requestCode,Intent intent,int flags)
2. static PendingIntent getService(Context context,int requestCode,Intent intent,int flags)
3. static PendingIntent getBroadcast(Context context,int requestCode,Intent intent,int flags)
可以将PendingIntent和AlarmManager结合,在指定时间启动Activity、Service,发送Broadcast
以下是AlarmManager的两个常用方法:
void set(int type,long trigerAtMills,PendingIntent operation)
void cancel(PendingIntent)
例如在2分钟后发送一个自定义的广播:
private static final String ALARM_XTRA_TIMEOUT = "com.xxx.location.XTRA_TIMEOUT";
private final AlarmManager mAlarmManager;
private PendingIntent mXtraTimeoutIntent;
mAlarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
mXtraTimeoutIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ALARM_XTRA_TIMEOUT), 0);
mAlarmManager.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 120000, mXtraTimeoutIntent);
mAlarmManager.cancel(mXtraTimeoutIntent);