一个简单的Android Intent使用实例,包括显式/隐式2种调用

来源:互联网 发布:刺客信条大革命pc优化 编辑:程序博客网 时间:2024/06/13 06:31

最近又开始接触了一下Android,准备将每次写的小Demo都在这里备份一下,以防以后忘记了,Demo相对来说都比较简单,内容也比较片面。今天主要就是练习了一下intent的使用,主要涉及到的知识点有:intent传值,隐式调用。

1.传值:

发送端:intent.putExtra("name", username.getText().toString());
接收端:
intent = getIntent();
intent.getStringExtra("name")这时候就获得了从前一个activity传递过来的参数name,传递参数不仅仅可以传递String类型,其他类型也可。2.当前activity被finis()掉之后,将参数传递到前一个页面:前一个activity中不使用startActivity(intent),而是使用startActivityForResult(intent, 123);后面的参数算是当前activity自定义的一个编码值,int类型。后一个activity中
Intent intent_back = new Intent();intent_back.putExtra("age", activiey2_age.getText().toString());setResult(200,intent_back);finish();
,然后在前一个activity中重写onActivityResult方法,具体代码如下,其中三个参数依次代表:请求activity的编码值,返回数据activity的编码值,返回结果intent:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {    Log.i("debug", "onActivityResult" + "requestCode" + requestCode + "\n resultCode=" + resultCode);    if (requestCode == 123) {        switch (resultCode) {            case 200:                userage.setText(data.getStringExtra("age"));                break;            case -1:                final Bitmap photo = data.getParcelableExtra("data");                imageView.setImageBitmap(photo);        }    }}
接下来再说说隐式调用,这种方式还是挺有用的也挺常用的,大体上可以理解模糊查询的意思了,大概就是说:不知道我要打开那个activity,但是我知道我要打开的activity要符合怎么样一个条件。
代码很简单

Intent intent2 = new Intent();intent2.setAction("com.text.jh");startActivity(intent2);
其中最关键的就是这个setAction()中的参数对应什么?这个值应该在哪里设置?首先说,设置的地方就在AndroidManifest.xml文件中,需要给对应的activity设置
<intent-filter>    <action android:name="com.text.jh"/>    <category android:name="android.intent.category.DEFAULT"/></intent-filter>
,前面所说的setAction()中的参数就对应到了action的name属性,注:这地方的使用方式是最简单的一种,也没有什么其他的设置。
看完整的代码案例;
项目目录结构:

AndroidManifest.xml文件:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.root.intentproject" >    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name=".MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity            android:name=".main2Activity"            android:label="@string/title_activity_main2" >            <intent-filter>                <action android:name="android.intent.action.SEND"/>                <category android:name="android.intent.category.DEFAULT"/>                <data android:mimeType="text/plain"/>            </intent-filter>        </activity>        <activity            android:name=".Main3Activity"            android:label="@string/title_activity_main3" >            <intent-filter>                <action android:name="com.text.jh"/>                <category android:name="android.intent.category.DEFAULT"/>            </intent-filter>        </activity>    </application></manifest>
MainActivity.java文件:
package com.example.root.intentproject;import android.content.Intent;import android.graphics.Bitmap;import android.nfc.Tag;import android.provider.MediaStore;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;import java.security.PrivateKey;public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private Button button1;    private Button button2;    private Button button3;    private Button button4;    private EditText username;    private TextView userage;    private ImageView imageView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        button1 = (Button) findViewById(R.id.button1);        button2 = (Button) findViewById(R.id.button2);        button3 = (Button) findViewById(R.id.button3);        button4 = (Button) findViewById(R.id.button4);        username = (EditText) findViewById(R.id.username);        userage = (TextView) findViewById(R.id.userage);        imageView = (ImageView) findViewById(R.id.imageView);        button1.setOnClickListener(this);        button2.setOnClickListener(this);        button3.setOnClickListener(this);        button4.setOnClickListener(this);    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        Log.i("debug", "onActivityResult" + "requestCode" + requestCode + "\n resultCode=" + resultCode);        if (requestCode == 123) {            switch (resultCode) {                case 200:                    userage.setText(data.getStringExtra("age"));                    break;                case -1:                    final Bitmap photo = data.getParcelableExtra("data");                    imageView.setImageBitmap(photo);            }        }    }    @Override    public void onClick(View view) {        switch (view.getId()) {            case R.id.button1:                Intent intent = new Intent();                intent.setClass(MainActivity.this, main2Activity.class);                intent.putExtra("name", username.getText().toString());                startActivityForResult(intent, 123);                break;            case R.id.button2:                Intent intent1 = new Intent();                intent1.setAction(MediaStore.ACTION_IMAGE_CAPTURE);                startActivityForResult(intent1, 123);                break;            case R.id.button3:                Intent sendIntent = new Intent();                sendIntent.setAction(Intent.ACTION_SEND);                sendIntent.putExtra(Intent.EXTRA_TEXT, "Android分享");                sendIntent.setType("text/plain");                startActivity(Intent.createChooser(sendIntent, "分享界面Title"));                break;            case R.id.button4:                Intent intent2 = new Intent();                intent2.setAction("com.text.jh");                startActivity(intent2);                break;        }    }}
main2Activity.java文件:
package com.example.root.intentproject;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.WindowManager;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class main2Activity extends AppCompatActivity implements View.OnClickListener {    private TextView textView;    private EditText activiey2_age;    private Button activiey2_back;    private Intent intent;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main2);        intent = getIntent();        textView = (TextView) findViewById(R.id.activiey2_data);        activiey2_age = (EditText) findViewById(R.id.activiey2_age);        activiey2_back = (Button) findViewById(R.id.activiey2_back);        textView.setText(intent.getStringExtra("name"));        activiey2_back.setOnClickListener(this);    }    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.activiey2_back:                Intent intent_back = new Intent();                intent_back.putExtra("age", activiey2_age.getText().toString());                setResult(200,intent_back);                finish();                break;        }    }}
Main3Activity.java文件:
package com.example.root.intentproject;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.TextView;public class Main3Activity extends AppCompatActivity {    private TextView textView3;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main3);        textView3 = (TextView) findViewById(R.id.textView3);        textView3.setText("在AndroidManifest.xml文件中本Activity的category配置了android.intent.category.DEFAULT,同时给action配置了com.ywz.ywz,这个名字也是后面隐式调用时action的值");    }}

activity_main.xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_centerHorizontal="true"    android:orientation="vertical"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity">    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        android:orientation="vertical">        <EditText            android:id="@+id/username"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:hint="请输入姓名" />        <TextView            android:id="@+id/userage"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:text="请选择年龄" />        <Button            android:id="@+id/button1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="activity跳转,传递姓名,填写年龄" />        <Button            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:id="@+id/button2"            android:text="隐式调用Intent,调用照相机功能"/>        <ImageView            android:layout_width="150dp"            android:layout_height="wrap_content"            android:id="@+id/imageView"/>        <Button            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:id="@+id/button3"            android:text="隐式调用Intent,调用分享功能,这个隐式调用类似于模糊查询,只要条件符合的activity都可以被打开,所以会出现一个选择框,提供用户选择"/>        <Button            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:id="@+id/button4"            android:text="隐式调用Intent"/>    </LinearLayout></RelativeLayout>
activity_main.xml2文件: 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.root.intentproject.main2Activity">    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        android:orientation="vertical"        >        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="this is 第二个 Activity,下面是传递过来的姓名" />        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:id="@+id/activiey2_data" />        <EditText            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:id="@+id/activiey2_age"            android:hint="输入年龄"/>        <Button            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:id="@+id/activiey2_back"            android:text="返回"/>    </LinearLayout></RelativeLayout>

activity_main.xml3文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.root.intentproject.Main3Activity">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/textView3"        android:text="我也算一个分享页面吧" /></RelativeLayout>
在这里就附上2个页面的运行效果图吧,大体操作流程就是:填写姓名,点击第一个按钮,在第二个页面会显示姓名,然后再第二个页面填写年龄,点击返回后,第一个页面会显示年龄,第二个按钮调用照相机,并将照片返回,第三个按钮点击之后是分享功能,可以进行分享,第四个按钮通过隐式调用跳至新的activity。

0 0
原创粉丝点击