安卓笔记4Intent

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值