android 开发intent传递数据(三)

版权声明:转载请申明出处,谢谢 https://blog.csdn.net/qq_35495763/article/details/86488110

问题一:如何跳转页面
Intent的作用是:各组件的传递数据的一种重要方式,不仅仅指明当前组件想要执行的动作,还可以在不同的组件之间传递数据。
用法分类:显示和隐式Intent
显式用法:
使用构造函数 intent(Context packageContext,Class<?> cls)
参数解释:1. 活动启动的上下文环境
2.class 指定想要启动的目标活动。
使用startActivity()方法

button1.setOnClickListener(new OnClickListener(){
public void onClick(View v){
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
}

方法二:使用隐式方法
不指明我们想要启动哪一个活动,而是指定了一系列action 和 category交由系统区分析这个Intent 。
步骤:
在标签下配置的内容,指定当前活动可以响应的action和category
举例;

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

文件二

button1.setOnClickListener(new OnClickListener(){
public void onClick(View v){
    Intent intent=new Intent("com.example.activitytest.ACTION_START");
    startActivity(intent);  //这里的category是是默认值,在执行startActivity()可以自动添加到intent中
}
}
//在将category和action都 匹配上的时候,可以启动secondActivity 了

关于action和category的几点说明
每个Intent 可以指定一个action 但是可以指定多个category。

intent.addCategory("com.example.activityteset.MYCATEGORY’);

扩展:使用隐式Intent的更多用法
一:启动其他程序的活动(多个Android应用程序之间功能共享)
举例:
调用系统浏览器

  button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://www.baidu.com"));//用于
                //intent正在操作的数据,数据的形式通常是URi.parse()解析产生的
                startActivity(intent);
            }
        });

标签那用于更精确的指定当前活动能够相应什么类型的数据。
主要可以配置以下内容
1.android:scheme 用与指定数据的协议部分。(http)
2.Android:host 用于指定主机名部分(www.baidu.com
3.android:port 用于指定数据的端口部分
4.android :path 用于指定主机名和端口之后的部分,如一段网址跟在域名之后的内容。
5.Android:mimetype用于指定可以处理的数据类型,语序使用通配符的方式进行指定。
举例:

<activity android:name=".Main2Activity" android:label="second Page">
            <intent-filter tools:ignore="AppLinkUrlError">
                <action android:name="android.intent.action.VIEW"> </action>
                <category android:name="android.intent.category.DEFAULT"></category>
                <data android:scheme="http"></data>
            </intent-filter>
        </activity>  

问题:使用隐式intent 打开系统拨号界面?

 buttonTest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent();
                intent.setAction(Intent.ACTION_DIAL);
                intent.setData(Uri.parse("tel:10086"));
                startActivity(intent);
            }
        });

在activity 之间传递信息

 Intent intent=new Intent(MainActivity.this,Main2Activity.class);
 intent.putExtra("name","Liming");  //设置intent 的信息的传递
startActivity(intent);
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        Intent intent=getIntent();  //获取intent传递
        intent.getStringExtra("name");//获取值
        Log.e("name",intent.getStringExtra("name")); //打印
}

页面的交互返回结果
步骤:
一:在请求页面里,使用startActivityForResult()

//在firstActivity中的配置
 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                intent.putExtra("name","Liming");
                startActivityForResult(intent,1); //1 为requestCode
            }
        });
//数据返回后的操作
 @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        switch( requestCode){   //什么样的请求有什么样的返回处理
            case 1:
                if(resultCode==RESULT_OK){
                    Log.e("name", "onActivityResult: "+data.getStringExtra("name"));
                }
                break;
                default:
        }
    }

secondeActivity的处理

//方法一:使用按钮处理并且返回结果吧!
buttonTest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent();
                intent.putExtra("name","Lixiao");
               setResult(RESULT_OK,intent); //设置返回结果(结果码,结果数据)
               finish();
            }
        });
//方法二:通过重载onBackPressed方法(在activity 中进行重载)
 @Override
    public void onBackPressed() {
        Intent intent=new Intent();
        intent.putExtra("name","OnBackPressed");
        setResult(RESULT_OK,intent);
        finish();
    }

猜你喜欢

转载自blog.csdn.net/qq_35495763/article/details/86488110