Android开发初级00_1有关intent的知识点

Intent的作用



显式intent在活动中的传递


.java文件

        /*按钮四的作用*///启动其他活动(intent的隐式实例)
        /*
        隐式
        就是在AndroidManifest.xml文件中为活动响应安卓活动的名字以及活动的种类
        并且在.java文件中,使用指定的名字即可。
         */
        Button button_action2=(Button)findViewById(R.id.button_action2);
        button_action2.setOnClickListener(new View.OnClickListener(){
            public  void onClick(View v){
                Intent intent=new Intent("com.example.activitytest.ACTION_START");
                intent.addCategory("com.example.activitytest.MY_CATEGORY");
                startActivity(intent);
            }
        });





隐式intent在活动中的传递


.java文件

        /*按钮四的作用*///启动其他活动(intent的隐式实例)
        /*
        隐式
        就是在AndroidManifest.xml文件中为活动响应安卓活动的名字以及活动的种类
        并且在.java文件中,使用指定的名字即可。
         */
        Button button_action2=(Button)findViewById(R.id.button_action2);
        button_action2.setOnClickListener(new View.OnClickListener(){
            public  void onClick(View v){
                Intent intent=new Intent("com.example.activitytest.ACTION_START");
                intent.addCategory("com.example.activitytest.MY_CATEGORY");
                startActivity(intent);
            }
        });


AndroidManifest.xml文件

        <activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="com.example.activitytest.MY_CATEGORY" />
            </intent-filter>
        </activity>





更多响应intent的方法


.java文件

        /*按钮五的作用*///启动其他活动(intent的隐式实例)之启动浏览器
        /*
        除了http协议之外,我们还有许多其他协议。
        比如:geo表示显示地理位置,tel表示拨打电话
        tel协议例子:
        intent>setData(Uri.parse("tel:10086"));
         */
        Button button_actionscan=(Button)findViewById(R.id.button_actionscan);
        button_actionscan.setOnClickListener(new View.OnClickListener(){
            public  void onClick(View v){
                Intent intent=new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://www.baidu.com"));
                startActivity(intent);
            }
        });

其实我们还可以创建自己的活动去响应对应的协议

AndroidManifest.xml

        <activity android:name=".ThirdActivity">
            <!--
            当我们确定活动三能过响应的action是Intent.ACTION_VIEW的常量值
            而category是指向默认的category值
            另外在<data>标签中,我们通过android:scheme指定了数据的协议必须是http协议
            这样活动三就可以和浏览器一样,响应一个打开网页的Intent了
            当再次触发按钮五时
            系统可以弹出两个选择项,一个是系统自带的浏览器
            另外一个就是我们刚刚编写的活动三(活动三的名字是ActivityTest)
            注意的是:活动三只是能够响应执行打开网页的Intent,但实际上这个活动是没有编写加载并显示
            网页的功能,所以在真的项目中不要出现这类误导用户的行为
            -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:scheme="http" />
            </intent-filter>
        </activity>
        <activity android:name=".databack" />
        <activity android:name=".action_1" />
        <activity android:name=".ReceiveData"></activity>





使用intent向下一个活动传递数据


首个(发送).java文件

        /*按键六的作用*///传递数据
        /*
        利用intent
        向下一个活动传递数据
         */
        Button button_actiondata=(Button)findViewById(R.id.button_actiondata);
        button_actiondata.setOnClickListener(new View.OnClickListener(){
            public  void onClick(View v){
                String data="Hello master GQ!";
                Intent intent=new Intent(FirstActivity.this,ReceiveData.class);
                intent.putExtra("extra_data",data);
                /*
                传递的两个参数,第一个是键,用于后面从Intent中取值
                第二个参数才是真正要传递的数据
                */
                startActivity(intent);
            }
        });


次个(接收).java文件

public class ReceiveData extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_receive_data);
        Intent intent=getIntent();
        String data=intent.getStringExtra("extra_data");
        Log.d("ReceiveData",data);
        Toast.makeText(ReceiveData.this, data,
                Toast.LENGTH_LONG).show();
    }
}





返回数据给上一个活动


首个(发送).java文件

        /*按键七的作用*///传递数据
        /*
        利用intent
        给上一个活动传递数据
         */
        Button button_actiondataback=(Button)findViewById(R.id.button_actiondata);
        button_actiondataback.setOnClickListener(new View.OnClickListener(){
            public  void onClick(View v){
                Intent intent=new Intent(FirstActivity.this,databack.class);
                /*
                传递的两个参数,第一个是键,用于后面从Intent中取值
                第二个参数才是真正要传递的数据
                */
                startActivityForResult(intent,1);
                /*
                这里用startActivityForResult()方法来启动databack.class
                请求代码只要是一个唯一值就可以了,这里传入的数据是1
                 */
            }
        });
    }


次个(点击关闭界面).java文件

public class databack extends AppCompatActivity {

    @Override
    /*
    重载父类的onBcakPressed()方法
    以防用户不是按的按钮而是是按的back键
    导致的无法向上一个活动返回数据的特殊情况
     */
    public void onBackPressed() {
        Intent intent=new Intent();
        intent.putExtra("data_return","Hello My first application!");
        setResult(RESULT_OK,intent);
        finish();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_databack);
        Button button_databack=(Button)findViewById(R.id.button_databack);
        button_databack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent();
                intent.putExtra("data_return","Hello My first application");
                setResult(RESULT_OK,intent);
                finish();
                /*
                创建intent,将要回传的数据存在intent中
                调用setResult()方法接收两个参数
                第一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OK或者RESULT_CANCELED这两个值
                第二个参数则把带有数据的intent传递回去,然后调用finish()方法销毁当前活动
                 */
            }
        });

    }
}

首个(返回后的页面,即就是开始启动页面).java文件

    /*
    对应按键七的取返回值并将七在日志文件中打印出来
    onActivityResult()方法带有三个参数
    第一个参数requestCode即使我们启动活动是传入的请求码
    第二个参数resultCode即我们在返回参数是传入的处理结果
    第三个参数data即携带返回的数据的Intent
    由于在一个活动中有可能调用startActuvutyForResult()方法去启动很多不同的活动
    每一个活动返回的数据都会回调到onActivityForResult()这个方法中,因此我们首先
    要做的是检查requesCode的值来判断数据来源。确定数据是从databack返回的之后
    我们再通过resultCode的值来判断处理的结果是否成功
    最后从data中取值并打印出来,这样我们就完成了向上一个活动返回数据的工作
    *为了防止用户是按的back进行的活动返回*
    *我们还需要在databack中重写onBackPressed()方法来解决这个问题
     */
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode){
            case 1:
                if(requestCode==RESULT_OK){
                    String returnedData=data.getStringExtra("data_return");
                    Log.d("FirstActivity",returnedData);
                }
                break;
            default:
        }
    }

今天
先写这一部分的知识点啦!
给大家推荐一首歌
can ‘ t hold us !

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值