一個簡單的Android Intent使用例項,包括顯式/隱式2種呼叫
阿新 • • 發佈:2019-02-08
最近又開始接觸了一下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接下來再說說隱式呼叫,這種方式還是挺有用的也挺常用的,大體上可以理解模糊查詢的意思了,大概就是說:不知道我要開啟那個activity,但是我知道我要開啟的activity要符合怎麼樣一個條件。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); } } }
程式碼很簡單:
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。