android中Activity的跳轉和Intent七個屬性簡單記錄(5)

1、如何實現Activity頁面跳轉?
		一、Intent intent=new Intent(this,BActivity.class);
		startActivity(intent);
 		二、Intent intent2=new Intent();
		intent2.setClass(MainActivity.this, BActivity.class);
		startActivity(intent2);

3、Intent啓動不一樣組件的方法:
     一、啓動Activity:
         startActivity()  、startActivtyForResult()
     二、啓動Service
       ComponetName startService()
       boolean bindService()
    三、啓動BroadcastReceiver:sendBroadcast()、sendOrderedBroadcast ()、sendStickyBroadcast()、sendStickyOrderedBroadcast()

4、 Intent對象大體包括7大屬性:ComponentName、 Action 、 Category 、 Data 、Type、 Extra 、Flag。
     一、ComponentName屬性:意圖分顯性和隱性意圖
       (1.1)、顯性意圖:
            Intent intent = new Intent();
           ComponentName cName = new ComponentName(MainActivity.this,NextActivity.class);
           intent.setComponent(cName);
          startActivity(intent);
         // 實際上,以上的寫法都被簡化爲如下寫法:
         Intent intent = new Intent(MainActivity.this,NextActivity.class);
         startActivity(intent);
      (1.2)、隱性意圖:
                  Intent intent3=new Intent();
	ComponentName cname=new ComponentName("com.xxx.xxx","com.xxx.xxx.類名");
	//能夠一個app跳到另外一個app兩個參數的意義:第一個表示要跳轉到APP的包名,第二個表示跳轉到的APP的頁面的類(class)
	 intent3.setComponent(cname);
	 startActivity(intent3);
      二、Action屬性 :經常使用Action屬性常量
     Intent對象不只能夠啓動本應用內的程序組件,也能夠啓動Android系統的其餘應用的組件,包括系統內置的程序組件(須要設置權
    限)。
      ACTION_MAIN:(android.intent.action.MAIN)Android程序入口。
     每一個Android應用必須且只能包含一個此類型的Action聲明。【若是設置多個,則哪一個在前,執行哪一個。】
     ACTION_VIEW: (android.intent.action.VIEW) 顯示指定數據。
     ACTION_EDIT: (android.intent.action.EDIT) 編輯指定數據。
     ACTION_DIAL: (android.intent.action.DIAL) 顯示撥號面板。
     ACTION_CALL: (android.intent.action.CALL) 直接呼叫Data中所帶的號碼。
    ACTION_ANSWER: (android.intent.action.ANSWER) 接聽來電。
    ACTION_SEND: (android.intent.action.SEND) 向其餘人發送數據(例如:彩信/email)。
    ACTION_SENDTO: (android.intent.action.SENDTO) 向其餘人發送短信。
    ACTION_SEARCH: (android.intent.action.SEARCH) 執行搜索。
   ACTION_GET_CONTENT: (android.intent.action.GET_CONTENT) 讓用戶選擇數據,並返回所選數據。

   三、Category 屬性:
    Category屬性爲Action增長額外的附加類別信息。CATEGORY_LAUNCHER意味着在加載程序的時候Acticity出如今最上面,而
    CATEGORY_HOME表示頁面跳轉到HOME界面。 
		Intent intent = new Intent();
		intent.setAction(intent.ACTION_MAIN);
		intent.addCategory(intent.CATEGORY_HOME);
		startActivity(intent);
  四、Data屬性:Intent利用Action屬性和Data屬性啓動Android系統內置組件的代碼
                                 1 )Intent intent=new Intent();//打電話
		intent.setAction(intent.ACTION_CALL);
		//intent.setAction("android.intent.action.CALL"); 
		// 如下各項皆如此,都有兩種寫法。
		intent.setData(Uri.parse("tel:10086"));
		startActivity(intent);
                                  2)// 調用撥號面板
                                   Intent intent=new Intent();
		intent.setAction(intent.ACTION_DIAL);
		intent.setData(Uri.parse("tel:10086"));
		startActivity(intent);
		3)//利用 Uri 打開瀏覽器、打開地圖等:
                                   //Uri uri = Uri.parse("http://www.google.com"); // 瀏覽器
		Uri uri2=Uri.parse("geo:39.899533,116.036476"); // 打開地圖定位
		Intent intent=new Intent();
		intent.setAction(intent.ACTION_VIEW);
		intent.setData(uri2);
		startActivity(intent);

    五、Type屬性:
    Type屬性用於指定Data所指定的Uri對應的MIME類型。MIME只要符合「abc/xyz」這樣的字符串格式便可。
     Intent利用Action、Data和Type屬性啓動Android系統內置組件的代碼:  
		Intent intent=new Intent();
		Uri uri=Uri.parse("/mnt/sdcard/papa.mp4");
                                   //type同時存在時要像下面同樣合併寫在一塊兒
		intent.setDataAndType(uri, "video/*");
		startActivity(intent);
    六、Extra屬性:
     一、經過intent.putExtra(鍵, 值)的形式在多個Activity之間進行數據交換。
         Intent利用Action、Data和Type、Extra屬性啓動Android系統內置組件的代碼:
        //發送短信的程序
	public void sms(View view){
		Intent intent=new Intent();
		intent.setAction(intent.ACTION_VIEW);
		intent.setType("vnd.android-dir/mms-sms");
		intent.putExtra("sms_body", "短信內容");
		startActivity(intent);
	}
	//發送短信
	public void send(View view){
		Uri uri=Uri.parse("smsto:10086");
		Intent intent=new Intent();
		intent.setAction(intent.ACTION_SENDTO);
		intent.setData(uri);
		intent.putExtra("sms_body", "短信內容");
		startActivity(intent);
	}
	// 發送彩信 , 設備會提示選擇合適的程序發送
	public void sendcai(View view){
		Uri uri=Uri.parse("/mnt/sdcard/aaa.png");
		Intent intent = new Intent();
		intent.setAction(Intent. ACTION_SEND );
		intent.setType("image/png");
		intent.putExtra("sms_body", " 內容 ");
		intent.putExtra(Intent.EXTRA_STREAM, uri);
		startActivity(intent);
	}
      七、Flags屬性:Intent可調用addFlags()方法來爲Intent添加控制標記
        一、FLAG_ACTIVITY_CLEAR_TOP:(效果同Activity LaunchMode的singleTask)
   若是在棧中已經有該Activity的實例,就重用該實例。重用時,會讓該實例回到棧頂,所以在它上面的實例將會被移除棧。若是棧中
   不存在該實例,將會建立新的實例放入棧中。
       二、FLAG_ACTIVITY_SINGLE_TOP:(效果同Activity LaunchMode的singleTop)
   若是在任務的棧頂正好存在該Activity的實例, 就重用該實例,而不會建立新的Activity對象。
       三、FLAG_ACTIVITY_NEW_TASK: (效果相似Activity LaunchMode的singleInstance)

八、android:launchMode四種屬性
="standard",每一次都會new一個Activity,hashcode會改變,getTaskId()不變
=" singleTop「若是在棧頂,返回時則不用new一個Activity,直接調用原來的 , 可是若是沒在棧頂,儘管棧中有也會新new一個Activity,getTaskId()

不變

="singleTask」跟 singleTop的區別是,若是棧中已存在實例,會把實例放在            棧頂,同時 singleTask會把前面的Activity清除掉,再   按返回

鍵時,會回到        手機桌面,getTaskId()也沒變

="singleInstance"若是當前窗口沒有該Activity實例,就會建立一個新的棧,把實例放進去,若是再重用它,不會再建立,而且TaskId會改變,即

只能new一次
相關文章
相關標籤/搜索