1. 程式人生 > >一個簡單的Android Intent使用例項,包括顯式/隱式2種呼叫

一個簡單的Android Intent使用例項,包括顯式/隱式2種呼叫

最近又開始接觸了一下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。