android的Intent

來源:互聯網
上載者:User

標籤:android的intent

        //通過制定setComponent來啟動組件public void start(View view){//建立一個意圖//Intent intent=new Intent(this,MainActivity2.class);Intent intent=new Intent();//建立組件,通過組件響應,直接IntentComponentName 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屬性尋找啟動activitypublic 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";@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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";@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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{@Overrideprotected 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{@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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{@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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);}}


本文出自 “matengbing” 部落格,請務必保留此出處http://matengbing.blog.51cto.com/11395502/1883732

android的Intent

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.