android的Intent

        //通過制定setComponent來啓動組件
	public void start(View view){
		//創建一個意圖
		//Intent intent=new Intent(this,MainActivity2.class);
		Intent intent=new Intent();
		//創建組件,通過組件響應,直接Intent
		ComponentName component=new ComponentName(this, MainActivity2.class);
		intent.setComponent(component);
		startActivity(intent);
	}
        public void start1(View view){
		Intent intent=new Intent(this,MainActivity9.class);
		startActivity(intent);
	}

通過action屬性查找啓動activity,必須在清單文件中進行配置

        //通過action屬性查找啓動activity
	public void start2(View view){
		Intent intent=new Intent();
		//設置動作,實際上action就是字符串標記而已
		intent.setAction(MainActivity3.MY_ACTION);
		startActivity(intent);
	}

MainActivity3

package com.example.intent;

import android.app.Activity;
import android.os.Bundle;
/**
 * 在自定義動作時,使用action組件時,必須添加一個默認類別
 * <activity android:name="MainActivity3">
              <intent-filter >
                  <action android:name="com.example.action.MY_ACTION">
                  </action>
                  <category android:name="android.intent.category.DEFAULT"/>
   </intent-filter>
   
 * 如果有多個組件被匹配成功,就會對話框列表的形式讓用戶進行選擇
 * */
public class MainActivity3 extends Activity{
	//自定義action標記
	
	public static final String MY_ACTION="com.example.action.MY_ACTION";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main3);
	}
}

清單文件中的配置,如果沒有類別,必須寫上默認類別

<category android:name="android.intent.category.LAUNCHER" />

  <application
        android:allowBackup="true"
        android:icon="@drawable/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>

加入的類別越多,越精確,如果有找不到的類別會報錯(假設有兩個類別,一個類別未找到,則報錯)

public void start3(View view){
		Intent intent=new Intent();
		intent.setAction(MainActivity4.MY_ACTION);
		intent.addCategory(MainActivity4.MY_CATEGORY);
		//如果MainActivity4中沒有在清單文件中配置,且寫了下面的類別,則會報錯
		//intent.addCategory(MainActivity4.MY_CATEGORY2);
		//加入的類別越多,越精確,如果有找不到的類別會報錯
		startActivity(intent);
	}

MainActivity4

package com.example.intent;

import android.app.Activity;
import android.os.Bundle;
/**
 * 自定義類別
 * 在Intent中可以添加多個類別
 * 那就要求被匹配的組件必須同時滿足這多個類別才能匹配成功,否則匹配失敗
 * 
 * */
public class MainActivity4 extends Activity{
	//自定義動作類別
	public static final String MY_CATEGORY="com.example.category.myCategory";
	public static final String MY_CATEGORY2="com.example.category.myCategory2";
	//自定義動作
	public static final String MY_ACTION="com.example.action.myAction2";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main4);
	}
}

清單文件中的MainActivity4

 <activity android:name="MainActivity4">
              <intent-filter >
                <!--   <action android:name="com.example.action.MY_ACTION"></action> -->
                  <action android:name="com.example.action.myAction2"></action>
                  <category android:name="com.example.category.myCategory"/>
                  <category android:name="com.example.category.myCategory2"/>
                  <category android:name="android.intent.category.DEFAULT"/>
                  <!-- 沒有類別時要加上默認類別 -->
			  </intent-filter>
 </activity>

 intent中的Date屬性

 Date屬性表示動作(要操作)的數據

 實際上一個Date是用一個URI對象表示

 通常情況下,使用action+date屬性的組合來描述一個意圖(intent)

 當Intent匹配的組件有多個時,先顯示優先級高的組件,如果優先級相同,顯示列表讓用戶自己選擇

 優先級從-1000到1000,並且其中一個必須爲負值纔有效



MainActivity5:指定訪問一個網址


                <intent-filter android:priority="800">

                    <action android:name="android.intent.action.VIEW"/>

                    <data android:scheme="http" android:host="java.lampbrother.net"/>

                <category android:name="android.intent.category.DEFAULT"/>

                </intent-filter>



Intent intent=new Intent();

intent.setAction(Intent.ACTION_VIEW);

Uri uri=Uri.parse("http://java.lampbrother.net");

intent.setData(uri);

startActivity(intent);

package com.example.intent;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
/**
 * intent中的Date屬性
 * Date屬性表示動作(要操作)的數據
 * 實際上一個Date是用一個URI對象表示
 * 通常情況下,使用action+date屬性的組合來描述一個意圖(intent)
 * 
 * 
 * 
 * 當Intent匹配的組件有多個時,先顯示優先級高的組件,如果優先級相同,顯示列表讓用戶自己選擇
 * 優先級從-1000到1000,並且其中一個必須爲負值纔有效
 * */
public class MainActivity5 extends Activity{
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main5);
	}
	
	
	public void testActionDateClick(View ivew){
		Intent intent=new Intent();
		intent.setAction(Intent.ACTION_VIEW);
		Uri uri=Uri.parse("http://java.lampbrother.net");
		intent.setData(uri);
		startActivity(intent);
	}
	
	public void testActivity7(View view){
		Intent intent=new Intent(this,MainActivity7.class);
		startActivity(intent);
	}
}

清單文件中MainActivity5的配置

         <activity android:name="MainActivity5"></activity>
            <activity android:name="MainActivity6">
                <intent-filter android:priority="800">
                    <action android:name="android.intent.action.VIEW"/>
                    <data android:scheme="http" android:host="java.lampbrother.net"/>
                	<category android:name="android.intent.category.DEFAULT"/>
                </intent-filter>
         </activity>

Intent

 date+type屬性

 type表示數據的類型或者MIME類型(如:text/xml,text/html,audio/mp3,image/png...)

 date和type屬性,一般只需要一個

 通過setDate方法會把type實行設置爲null,相反,設置setType也會把date屬性設置爲null

 如果想要兩個屬性同時設置,要使用setDateAndType方法設置



MianActivity7:調用系統選擇(各種)文件,以mp3文件爲例,

package com.example.intent;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
/**
 * Intent
 * date+type屬性
 * type表示數據的類型或者MIME類型(如:text/xml,text/html,audio/mp3,image/png...)
 * date和type屬性,一般只需要一個
 * 通過setDate方法會把type實行設置爲null,相反,設置setType也會把date屬性設置爲null
 * 如果想要兩個屬性同時設置,要使用setDateAndType方法設置
 * 
 * */
public class MainActivity7 extends Activity{
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main7);
	}
	
	public void play7(View view){
		Intent intent=new Intent();
		intent.setAction(Intent.ACTION_VIEW);
		Uri date=Uri.parse("file:///sdcard/xx.mp3");
		//intent.setData(date);
		//intent.setDataAndType(data, type);
		intent.setType("audio/mp3");
		startActivity(intent);
	}
}

MainActivity8

package com.example.intent;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
/**
 * activity的啓動模式:4種
 * 1.standard 標準模式,每次啓動都會創建一個新的activity,加入目標任務的棧頂
 * 2.singleTop,判斷當前任務棧頂是否存在相同的activity,如果存在直接使用
 * 如果不存在,那麼創建新的activity對象放入棧頂
 * 3.singleTask:在任務棧中是會判斷否存在相同的activity,如果存在,那麼會清除該activity之上的其他activity對象來顯示
 * 如果不存在,創建新的activity對象放入棧頂
 * 4.singleInstance:會在一個新的任務棧中創建activity,並且該任務棧中只允許存在一個activity實例,
 * 其他調用該activity的組件會直接使用該任務棧中的activity對象
 * 
 * Intent的flags屬性也可以指定啓動模式
 * 
 * 
 * 
 * */
public class MainActivity8 extends Activity{
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main8);
	}
	public void start1(View view){
		Intent intent=new Intent(this,MainActivity9.class);
		startActivity(intent);
	}
	public void start2(View view){
		Intent intent=new Intent(this,MainActivity8.class);
		//相當於singleTask
		//intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		//相當於singleTop
		//intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
		startActivity(intent);
	}
	
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章