Intent
- 中文翻译为意图
- 作用是实现组件之间的通信
- 应用
- 用来开启Activity
- 开启一个后台的
- 用来传递广播 - Intent对象属性
Componentname - 用来设置Intent对象组件的名称,
- 通过Component name可以启动其他的Activity,或者启动其他应用的Activity
- 通过setComponent方法设置,需要传递ComponentName
- 创建ComponentName对象的时候需要指定两个参数,一个是应用的包名,另一个是要启动组件的类名(完整的类名)
Button button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
/*ComponentName componentName=
new ComponentName("com.example.demo2","com.example.demo2.DetaiActivi");
//com.example.demo2是包名,com.example.demo2.DetaActivity是类名
intent.setComponent(componentName);*/
intent.setComponent(new ComponentName(MainActivity.this,DetaiActivi.class));
startActivity(intent);
}
});
创建一个类和Activity并关联起来,然后再添加到清单文件中
Action和Date
- Action和Date需要联合使用
- ACTION_DEIT------->content://com.android.contacts/contacts/1
- ACTION_CALL------->tel:10086
- ACTION_VIEW------->http:/www.mingribook.com
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageButton imageView=findViewById(R.id.phone);
ImageButton imageView1=findViewById(R.id.sms);
//设置监听器对象
imageView.setOnClickListener(l);
imageView1.setOnClickListener(l);
}
View.OnClickListener l=new View.OnClickListener() {//由于两个方法有点像,重写方法比较方便
@Override
public void onClick(View v) {
//由于需要启动Activity所以定义Intent
Intent intent=new Intent();
//把View转换成ImageButton
ImageButton imageButton=(ImageButton)v;
//判断单击了哪个按钮
switch (imageButton.getId()){
case R.id.phone:
//实现拨打电话的代码
intent.setAction(intent.ACTION_DIAL);//调用拨号面板
intent.setData(Uri.parse("tel:10086"));//设置电话号码
startActivity(intent);
break;
case R.id.sms:
intent.setAction(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("smsto:18279822925"));//设置默认发送短信的号码
intent.putExtra("sms_body","sdfgdjhg");//设置默认发送短信的内容
startActivity(intent);
break;
}
}
};
<ImageButton
android:id="@+id/phone"
android:layout_margin="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/call"
/>
<ImageButton
android:id="@+id/sms"
android:paddingTop="10dp"
android:layout_margin="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/mess"
/>
由于需要权限,所以需要在清单文件中添加获取权限的代码
Action和Category
- Category用来对执行动作的类别描述的
- CATEGORY_DEFAULT用来把指定的Avtivity作为执行数据的默认动作
- CATEGORY_LAUNCHER用来指定把Activity作为应用程序的入口
- CATEGORY_HOME用于返回系统桌面的
点击关闭按钮回到主屏幕
//设置全屏显示
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
Button button=findViewById(R.id.guanbi);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//使用Intent
Intent intent=new Intent();
intent.setAction(intent.ACTION_MAIN);//作为初始Activity启动
intent.addCategory(intent.CATEGORY_HOME);//设置返回桌面的常量
startActivity(intent);
}
});
- Extras属性
- 用于向Intent组件添加附加信息,通常情况下是使用键值对来储存
- putExtras()添加方法
- getExtras()获取方法
- 通常用在多个ACtivity之间进行数据交换的时候
- Flags属性
- 主要是用来指示安卓程序应该如何去启东另一个Activity
- Task是一组以栈的模式聚集到一起的Activity的组件的集合,主要用来保存Activity,还可以指示程序启动后如何处理
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,DetaiActivi.class);
intent.setFlags(intent.FLAG_ACTIVITY_NO_HISTORY);//不在历史栈中保留,一旦离开就自动关闭
startActivity(intent);
}
Intent的种类
-
显示Intent
- 创建Intent对象的时候直接指定一个目标组件名称然后启动目标组件
- 创建Intent对象的语法格式:
- Intent intent=new Intent(Context packageContext,Class<?>cls)
- Context packageContext是上下文对象,可以设置为MainActivity.this
- Class<?>cls是要启动的Activity的类
-
隐式Intent
- 在Intent对象的时候不指定具体的目标组件而是指定action或者category或者data(Uri或者数据类型)
- Android系统根据设置好的匹配规则找到要启动的Activity
区别
- 显示Intent:直接指定目标组件的名称
- 多用于在应用程序内部传递信息
- 隐式Intent:不会用组件名称定义要激活的目标组件
- 多用于在不同应用程序之间传递信息
public void onClick(View v) {
Intent intent=new Intent();
intent.setAction(intent.ACTION_VIEW);//要把数据显示给用户
intent.setData(Uri.parse("http://www.baidu.com"));//设置数据为data,数值为网址
startActivity(intent);
}
Intent过滤器
- 设置Intent过滤器
- 通过<intent_filter>标记在清单文件中配置
<intent_filter>
<action/>//指定组件所能响应的动作
<category/>//指定以那种方式执行intent请求
<date/>//向action提供要操作的数据
</intent_filter>
Button button=findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setAction(intent.ACTION_VIEW);
startActivity(intent);
}
});
Android程序调试
- 设置断点
- 点击DeBUG