1. 意图
1.1. Intent:意图
显示意图: Intent(Context context,Class clazz)
功能: 启动Activity
1.2. 隐式意图: Intent(String action) 比如:分享选择、视频选择播放器、邮箱
注册了该action的App都可以启动接收
功能: 启动App
分享应用注册action:
<activity name=".a">
<intent-filter>
<action>com.kuaibo.share</action>
</intent-filter>
</activity>
一个Activity要成为主要的Activity:
<action android:name="android.intent.action.MAIN" /> 配置、
1.3 意图案例: Android2.3源码使用:
案例1:启动拨号界面
// 启动拨号界面
// 通过ActivityManager过滤找到Activity包名
// 找源码,找到功能清单文件中的intent-filter
String action= Intent.ACTION_DIAL;
Intent intent=new Intent(action);
// Shema 前缀
intent.setData(Uri.parse("tel:"+110));
startActivity(intent);
案例2: 启动发短信界面:
// 发短信界面
Intent intent = new Intent("android.intent.action.SENDTO",Uri.parse("sms:"+110));
intent.putExtra("sms_body","hello");
startActivity(intent);
案例3:发送短信:
<!-- 权限配置 -->
<uses-permission android:name="android.permission.SEND_SMS" />
private static final int MY_PERMISSIONS_REQUEST_CALL_PHONE =10 ;
// 方法调用入口这里
public void testMsmTo()
{
// 判断权限
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.SEND_SMS)
!= PackageManager.PERMISSION_GRANTED)
{
// 权限申请
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.SEND_SMS},
MY_PERMISSIONS_REQUEST_CALL_PHONE);
} else
{
//具备权限发短信
sendMsm();
}
}
public void sendMsm()
{
// 发短信
SmsManager smsManager= SmsManager.getDefault();
//PendingIntent sentIntent, PendingIntent deliveryIntent 用于做短短信回执,别人看了短信有回复
//(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)
smsManager.sendTextMessage("15580917583",null,"通过ActivityManager过滤找到Activity包名",null,null);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
{
if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE)
{
if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
sendMsm();
} else
{
// Permission Denied
Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
}
return;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
4 查看打出运行时哪个Activity
2. Activity 生命周期:
启动: onCreate -> onStart -> onResume
死亡: onPause -> onStop -> onDestroy
运行到停止:onPause->onStop
停止到运行:onRestart-> onStart ->onResume 跳入B Activity
运行到暂停: onPause 弹出对话框
暂停到运行: onResum
3. Activity数据传递,待返回值的回调
3.1. Activity数据传递,待返回值的回调
ActivityA组装数据:
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
// 数据传递
intent.putExtra("name","xiaoze");
// 请求码
startActivityForResult(intent,1000);
ActivityB接收数据:
String name= getIntent().getStringExtra("name");
Toast.makeText(SecondActivity.this,name,Toast.LENGTH_LONG).show();
Intent data=new Intent();
// 携带返回数据
data.putExtra("back_name","xiaozemaliya");
// 返回状态吗
setResult(2000,data);
// 关闭页面
finish();
ActivityA回调接收数据:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// 请求吗和响应吗对应上
if(requestCode ==1000 && resultCode == 2000 ){
String result= data.getStringExtra("back_name");
Log.e("denganzhi1",result);
}
super.onActivityResult(requestCode, resultCode, data);
}
5. Activity 的任务栈,先进去后出
启动模式:
standard:默认每次新启动Activity
singleTop: 如果已经位于栈顶,那么复用, 不位于栈顶,启动新的
singleTask: 如果已经位于栈顶,那么复用, 不位于栈顶,把它上面的出栈
android:launchMode="singleInstance": 创建一个新的栈,只有一个实例
启动1 , 启动2 singleInstance , 启动3 ,3位于TaskA 上