1. 程式人生 > >intent詳解(二)

intent詳解(二)

前言:上篇講解了有關intent的基礎知識,現在通過幾個例項講講intent這幾個屬性的具體應用,還有,(題外話)我發現不能一直聽《一生所愛》太悲涼,整得我一晚上都沒勁頭了,心情很低落,看來以後還是少聽悲傷的歌為好。

相關連結:

一、使用包含預定義動作的隱式Intent

效果圖:

     初始狀態(一個按鈕)                      跳轉(多個activity符合條件,讓使用者選擇一個)    

   

       選擇我們自己寫義的一個activity


1、新建應用,在佈局檔案中,新增一個button

<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"
    tools:context="com.example.intenttest1.MainActivity" >

    <Button 
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="轉到action.VIEW"/>

</RelativeLayout>

2、新建一個Activity,命名為:SecondActivity

佈局如下:(只是改了一下textview的顯示值,其它沒動)
<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"
    tools:context="com.example.intenttest1.SecondActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="第二個activiy" />

</RelativeLayout>

3、修改AndroidManifest.xml

修改SecondActivity的屬性,為其新增系統定義的Action,修改如下:

<activity
    android:name=".SecondActivity"
    android:label="@string/title_activity_second" >
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

4、定義隱式intent跳轉

在MainActivity中,當點選按鈕時實現隱式intent跳轉。
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Button btn = (Button)findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent();
				intent.setAction(Intent.ACTION_VIEW);
				startActivity(intent);
				
			}
		});
    }

}

原始碼在文章最底部給出。

二、使用自定義動作的隱式Intent

1、在上例的基礎上,更改AndroidManifest.xml,為SecondActivity自定義一個action name

 <activity
     android:name=".SecondActivity"
     android:label="@string/title_activity_second" >
     <intent-filter>
         <action android:name="test_action" />

         <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>
 </activity>
2、隱式Intent跳轉
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Button btn = (Button)findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent();
				intent.setAction("test_action");
				startActivity(intent);
				
			}
		});
    }

}
在intent.setAction()裡直接傳入自定義的action name,就直接跳轉到指定的activity,因為只有這個activity才符合條件,如若有多個activity都有action name="test_action"的話,那就會像上例一樣列出列表供使用者選擇。
原始碼在文章最底部給出。

效果圖:

     初始化狀態                                                        點選跳轉

   

三、使用Intent開啟網頁

效果圖:

    初始化狀態                                                              開啟百度網頁

   

1、新建工程testIntent3,在主頁面加一個Button

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"
    tools:context="com.example.intenttest1.MainActivity" >

    <Button 
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="開啟百度"/>

</RelativeLayout>
2、點選Button開啟網頁
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Button btn = (Button)findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent();
				intent.setAction(Intent.ACTION_VIEW);
				intent.setData(Uri.parse("http://www.baidu.com"));
				startActivity(intent);
				
			}
		});
    }

}
使用隱式Intent,利用執行資料來匹配activity,由於執行資料是網頁,所以也就只有瀏覽器才能匹配,所以如果你手機上有不止一個瀏覽器的話,同樣會以列表形式讓你選擇用哪一個開啟。如下圖:



所有原始碼打包一起下載: