中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

android之Intent的七大屬性

    Intent用于封裝程序的“調(diào)用意圖”。兩個Activity之間,可以把需要交換的數(shù)據(jù),封裝成Bundle對象,然后使用Intent對象,攜帶數(shù)據(jù)到另一個Activity中。實現(xiàn)兩個Activity的數(shù)據(jù)交換。

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、威海ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的威海網(wǎng)站制作公司

    Intent還是各種應(yīng)用程序組件之間通信的重要媒介。啟動Activity、Service、BroadcastReceiver,都需要使用Intent。

    Intent還有一個好處,如果應(yīng)用程序只是想啟動具有某種特征的組件,并不想和某個具體的組件耦合,則可以通過在int ent - filt er 中配置相應(yīng)的屬性進(jìn)行處理,與s t uc t s 2 中的MVC框架思路類似

    Intent對象大致包括7大屬性:1、Component Name,2、Action,3、Catory,4、data,5、Type,6、Extra,7、Flag。

    ·Action作為標(biāo)識符,代表一個Intent ,當(dāng)一個Activity 需要外部協(xié)助處理時,就會發(fā)出一個Intent,如果一個程序能完成相應(yīng)功能,只要在int ent - filt er 加上這個這個intent 就可以了。

    ·Data保存需要傳遞的數(shù)據(jù)格式,比如:tel://

    ·Extras保存需要傳遞的額外數(shù)據(jù)。

    ·Category 表示Intent的種類,從android上啟動Activity 有多種方式,比如 程序列表、桌面圖標(biāo)、點擊Home激活的桌面等等,Category則用來標(biāo)識這些Activity的圖標(biāo)會出現(xiàn)在哪些啟動的上下文環(huán)境里。

(一) ComponentName:明確指定Intent將要啟動哪個組件,因此這種Intent被稱為顯示Intent,沒有指定ComponentName屬性的Intent被稱為隱式Intent。隱式Intent沒有明確要啟動哪個組件,應(yīng)用匯根據(jù)Intent指定的規(guī)則去啟動符合條件的組件。ComponentName不僅可以啟動本程序中的activity,還可以啟動其它程序的activity。

啟動方式:

Intent intent =new Intent();

ComponentNamecomponent= new ComponentName(this, TwoActivity.class);

intent.setComponent(component);

等價于:

Intent intent =new Intent(this, TwoActivity.class);

startActivity(intent);

等價于:

Intent intent =new Intent();

intent.setClass(this,TwoActivity.class);

startActivity(intent);

等價于:

Intent intent =new Intent();

intent.setClassName(this,"com.zzh.day06_intent.TwoActivity");

startActivity(intent);

本程序中啟動其它程序:

 

(二) Action、Category 屬性與intent-filter配置:

通常,Action, Category屬性結(jié)合使用。定義這兩個屬性都是在主配置文件的<intent-filter>節(jié)點中。Intent通過定義Action屬性(其實就是定義一段自定義的字符串),這樣就可以把Intent與具體的某個Activity分離,實現(xiàn)了解耦。否則,每次跳轉(zhuǎn)都有寫成,

(三) data:

1、 用于添加數(shù)據(jù)。通常是啟動某個系統(tǒng)程序或其他程序,帶給此程序的信息。Data屬性通常用于向Action屬性提供操作的數(shù)據(jù)。Data屬性的值是個Uri對象。

Uri的格式如下:scheme://host:port /path

2、 系統(tǒng)內(nèi)置的屬性常量

tel:是固定寫法,是系統(tǒng)內(nèi)置的屬性常量。

系統(tǒng)內(nèi)置的幾個Dat a屬性常量:

·tel: //:號碼數(shù)據(jù)格式,后跟電話號碼。

·mailto: //:郵件數(shù)據(jù)格式,后跟郵件收件人地址。

·smsto: //:短息數(shù)據(jù)格式,后跟短信接收號碼。

·content : //:內(nèi)容數(shù)據(jù)格式,后跟需要讀取的內(nèi)容。

·file://:文件數(shù)據(jù)格式,后跟文件路徑。

·market://search?q=pname:pkgname:市場數(shù)據(jù)格式,在Google Market里搜索包名為pkgname的應(yīng)用。

·geo: //latitude, longitude:經(jīng)緯數(shù)據(jù)格式,在地圖上顯示經(jīng)緯度所指定的位置。

四、Intent利用Action屬性和Dat a屬性啟動Android系統(tǒng)內(nèi)置組件的代碼

(一)、撥打電話:

Intent intent=new Intent();

intent.setAction(Intent.ACTION_CALL);

//intent.setAction("android.intent.action.CALL");  //以下各項皆如此,都有兩種寫法。

intent.setData(Uri.parse("tel:1320010001"));

startActivity(intent);

//調(diào)用撥號面板:

Intent intent=new Intent();

intent.setAction(Intent.ACTION_DIAL);

intent.setData(Uri.parse("tel:1320010001"));

startActivity(intent);

//調(diào)用撥號面板:

Intent intent=new Intent();

intent.setAction(I ntent.ACTION_VIEW);

intent.setData(Uri.parse("tel:1320010001"));

startActivity(intent);

(二)、利用Uri打開瀏覽器、打開地圖等:

Uri uri = Uri.parse("https://www.baidu.com");//瀏覽器

Uriuri=Uri.parse("geo:39.899533,116.036476"); //打開地圖定位

Intent intent = new Intent();

intent.setAction(Intent.ACTION_VIEW);

intent.setData(uri);

startActivity(intent);

(五)Type屬性

1、Type屬性用于指定Data所指定的Uri對應(yīng)的MIME類型。MIME只要符合“abc /xyz”這樣的字符串格式即可。

2、Intent利用Action、Data和Type屬性啟動Android系統(tǒng)內(nèi)置組件的代碼:

播放視頻:

Intent intent = new Intent();

Uri uri =Uri.parse("file:///sdcard/media.mp4");

intent.setAction(Intent.ACTION_VIEW);

intent.setDataAndType(uri,"video/*");

startActivity(intent);

(六)Extra屬性

1、通過intent.putExtra(鍵, 值)的形式在多個Activity之間進(jìn)行數(shù)據(jù)交換。

2、系統(tǒng)內(nèi)置的幾個Extra常量

EXTRA_BCC:存放郵件密送人地址的字符串?dāng)?shù)組。

EXTRA_CC:存放郵件抄送人地址的字符串?dāng)?shù)組。

EXTRA_EMAIL :存放郵件地址的字符串?dāng)?shù)組。

EXTRA_SUBJECT:存放郵件主題字符串。

EXTRA_TEXT:存放郵件內(nèi)容。

EXTRA_KEY_EVENT:以KeyEvent對象方式存放觸發(fā)Intent 的按鍵。

EXTRA_PHONE_ NUMBER :存放調(diào)用ACTION_CALL 時的電話號碼。

3、Intent利用Action、Data和Type、Extra屬性啟動Android系統(tǒng)內(nèi)置組件的代碼:

調(diào)用發(fā)送短信的程序

Intent intent = new Intent();

intent.setAction(Intent.ACTION_VIEW);

intent.setType("vnd.android-dir/mms-sms");

intent.putEx tra("sms_body","信息內(nèi)容...");

startActivity(intent);

//發(fā)送短信息

Uri uri =Uri.parse("smsto:13200100001");

Intent intent = new Intent();

intent.setAction(Intent.ACTION_SENDTO);

intent.setData(uri);

intent.putEx tra("sms_body","信息內(nèi)容...");

startActivity( intent );

//發(fā)送彩信,設(shè)備會提示選擇合適的程序發(fā)送

Uri uri = Uri.parse("content://media/external/p_w_picpaths/media/23"); //設(shè)備中的資源(圖像或其他資源)

Intent intent = new Intent();

intent.setAction(Intent. ACTION_SEND );

intent.setType("p_w_picpath/png");

intent.putExtra("sms_body","內(nèi)容");

intent.putExtra(Intent.EX TRA_STREAM,uri);

startActivity(it);

發(fā)送Email:

Intent intent=new Intent();

intent.setAction(I ntent.ACTION_SEND);

String[]tos={"android1@163.com"}

String[]ccs={"you@yahoo.com"};

intent.putExtra(Intent.EXTRA_EMAIL, tos);

intent.putExtra(Intent.EXTRA_CC, ccs);

intent.putExtra(Intent.EXTRA_TEX T,"The email body text");

intent.putExtra(Intent.EXTRA_SU BJ ECT,"The email subject text");

intent.setType("message/rfc822");

startActivity(Intent.createChooser(intent,"Choose Email Client"));

Intent intent = newIntent(Intent.ACTION_SEND);

String[] tos = {"mobileservice@ablesky.com"};

intent.putExtra(I ntent.EXTRA_EMAIL, tos);

intent.putExtra(I ntent.EXTRA_TEXT,getPhoneParameter());

intent.putExtra(Intent.EXTRA_SUBJECT,"Android日志");

intent.putEx tra(Intent.EXTRA_STREAM, Uri.fromFile(cacheDir));

intent.setType("message/rfc882");

intent.setType("plain/text");

Intent.createChooser(intent, "請選擇郵件發(fā)送軟件");

startActivity(intent);

intent.setAction(android.provider.Settings.ACTION_SETTINGS)

4、Intent利用Action屬性中的ACTION_GET_CONTENT獲取返回值

//選擇圖片requestCode返回的標(biāo)識

Intent intent = new I ntent();

intent.setAction(I ntent.ACTION_GET_CONTENT );

intent.setType( "p_w_picpath/* " );

Intent wrapperIntent = Intent.createChooser(intent, null);

startActivityForResult(wrapperIntent,requestCode);

//添加音頻

Intent intent = new Intent();

intent.setAction(Intent.ACTION_GET_CONTENT);

intent.setType( "video/* " );

Intent wrapperIntent = Intent.createChooser(intent, null);

startActivityForResult(wrapperIntent,requestCode);

//視頻

Intent intent = new Intent();

intent.setAction(Intent.ACTION_GET_CONTENT);

intent.setType( "video/* ");

Intent wrapperIntent = Intent.createChooser(intent, null);

startActivityForResult(wrapperI ntent,requestCode);

//錄音

Intent intent = new Intent();

intent.setAction(Intent.ACTION_GET_CONTENT );

intent.setType( "audio/amr" );

intent.setClassName("com.android.soundrecorder","com.android.soundrecorder.SoundRecorder");

startActivityForResult(intent, requestCode);

(七)、Flags 屬性:Intent 可調(diào)用addFlags()方法來為Intent 添加控制標(biāo)記?!局匾?/p>

1 、FLAG_ ACTIVITY_CLEAR_TOP:(效果同Activity LaunchMode的singleTask)

如果在棧中已經(jīng)有該Activity的實例,就重用該實例。重用時,會讓該實例回到棧頂,因此在它上面的實例將會被移除棧。如果棧中不存在該實例,將會創(chuàng)建新的實例放入棧中。

2 、FLAG_ACTIVITY_SINGLE_TOP:(效果同Activity L aunchMode的singleTop)

如果在任務(wù)的棧頂正好存在該Activity的實例, 就重用該實例,而不會創(chuàng)建新的Activity 對象。

3 、FLAG_ ACTIVITY_NEW_TASK:

【備注:】以下幾個為了解。

4 、FLAG_ACTIVITY_MULTIPLE_TASK:

5 、FLAG_ACTIVITY_BROUGHT_TO_FRONT:

6 、FLAG_ACTIVITY_RESET_TASK_IF_NEEDED:

示例代碼:

Intent intent = new Intent(this,MainActivity.class);

//將Activity棧中處于MainActivity主頁面之上的Activity都彈出。

intent.setFlags(Intent.FLAG_ACTI VI TY_CLEAR_TOP);

startActivity(intent);

例如:

如果依次啟動了四個Activity :A、B、C 、D。

在D Activity 里,跳到B Activity,同時希望D和C 都finish掉,可以在startActivity (intent )里的intent 里添加flags標(biāo)記,如下所示:

Intent intent = new Intent(this , B.class);   

intent .setFlags (Intent .FLAG_ACTIVITY_CLEAR_TOP); 

s t ar t Activity(intent );

這樣啟動B  Activity的同時,就會把D、C 都finis hed掉。

如果B  Activity的launchMode是默認(rèn)的“st andar d”,則B  Activity會首先finis hed掉舊的B頁面,再啟動一個新的Activity   B。如果不想重新再創(chuàng)建一個新的B  Activity,而是重用之前的B  Activity,可以將B  Activity的launchMode設(shè)置為“singleTask”?!咎貏e需要注意的是:在部分手機(jī)中,如三星手機(jī)。即便是singleTask也會產(chǎn)生新的頁面,而不是重用之前的頁面?!?/p>

四、利用Intent屬性調(diào)用系統(tǒng)app的示例代碼:

1、布局核心代碼:

<ScrollView
      android:id="@+id/ScrollView1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content" >
      <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical" >

          <Button
              android:id="@+id/Button_main_call "
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickButton"
              android:text=" 直接撥號" />

          <Button
              android:id="@+id/Button_main_dial"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickButton"
              android:text=" 啟動撥號面板" />

          <Button
              android:id="@+id/Button_main_dialer"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickButton"
              android:text="顯示撥號面板" />

          <Button
              android:id="@+id/Button_main_sms"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickButton "
              android:text="發(fā)送短信" />

          <Button
              android:id="@+id/Button_main_setting"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickButton "
              android:text="系統(tǒng)設(shè)置" />

          <Button
              android:id="@+id/Button_main_datesetting"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickButton"
              android:text=" 日期設(shè)置" />

          <Button
              android:id="@+id/Button_main_soundsetting"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickButton"
              android:text=" 聲音設(shè)置" />

          <Button
              android:id="@+id/Button_main_wifisetting"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickButton"
              android:text=" W I F I 設(shè)置" />

          <Button
              android:id="@+id/Button_main_web"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickButton"
              android:text=" 瀏覽網(wǎng)頁" />

          <Button
              android:id="@+id/Button_main_contacts"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickButton"
              android:text=" 查看聯(lián)系人" />

          <Button
              android:id="@+id/Button_main_showp_w_picpath"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickButton"
              android:text=" 查看圖片" />

          <Button
              android:id="@+id/Button_main_showtext"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickButton"
              android:text=" 查看文本" />

          <Button
              android:id="@+id/Button_main_playvideo"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickButton"
              android:text=" 播放視頻" />

          <Button
              android:id="@+id/Button_main_playaudio"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickButton"
              android:text=" 播放音頻" />

          <Button
              android:id="@+id/Button_main_home"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickButton"
              android:text=" H O M E " />
      </LinearLayout>
  </ScrollView>

2 、java核心代碼:

public class MainActivity extends Activity
{
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.a);
	}

	public void clickButton(View view)
	{
		Intent intent = new Intent();
		// android.content.intent.ACTION_VIEW
		intent.setAction(android.content.Intent.ACTION_VIEW);
		switch (view.getId())
		{
		case R.id.Button_main_call:
			intent.setAction(android.content.Intent.ACTION_CALL);
			intent.setData(Uri.parse("tel:10086"));
			break;
		case R.id.Button_main_dial:
			intent.setAction(android.content.Intent.ACTION_DIAL);
			intent.setData(Uri.parse("tel:10086"));
			break;
		case R.id.Button_main_dialer:
			intent.setAction("com.android.phone.action.TOUCH_DIALER");
			break;
		case R.id.Button_main_sms:
			intent.setAction(android.content.Intent.ACTION_SENDTO);
			intent.setData(Uri.parse("smsto:10086"));
			intent.putExtra("sms_body", "該吃飯了,下課吧!");
			break;
		case R.id.Button_main_setting:
			intent.setAction("android.settings.settings");
			break;
		case R.id.Button_main_datesetting:
			intent.setAction("android.settings.DATE_settingS");
			break;
		case R.id.Button_main_soundsetting:
			intent.setAction("android.settings.SOUND_settingS");
			break;
		case R.id.Button_main_wifisetting:
			intent.setAction("android.settings.WIFI_settings");
			break;
		case R.id.Button_main_contacts:
			intent.setAction("com.android.contacts.action.LIST_contacts");
			break;
		case R.id.Button_main_web:
			intent.setAction(android.content.Intent.ACTION_VIEW);
			intent.setData(Uri
					.parse("http://www.baidu.com"));
			break;
		case R.id.Button_main_showp_w_picpath:
			intent.setAction(android.content.Intent.ACTION_VIEW);
			intent.setDataAndType(
					Uri.fromFile(new File(
							"mnt/sdcard/Download/landscape.jpg")),
					"p_w_picpath/*");
			break;
		case R.id.Button_main_showtext:
			intent.setAction(android.content.Intent.ACTION_VIEW);
			intent.setDataAndType(
					Uri.fromFile(new File(
							"mnt/sdcard/Download/info.txt")),
					"text/*");
			break;
		case R.id.Button_main_playaudio:
			intent.setAction(android.content.Intent.ACTION_VIEW);
			intent.setDataAndType(
					Uri.fromFile(new File(
							"mnt/sdcard/Download/heavencity.mp3")),
					"audio/*");
			break;
		case R.id.Button_main_playvideo:
			intent.setAction(android.content.Intent.ACTION_VIEW);
			intent.setDataAndType(
					Uri.fromFile(new File(
							"mnt/sdcard/Download/girl.3gp")),
					"video/*");
			break;
		case R.id.Button_main_home:
			intent.setAction("android.intent.action.main");
			intent.addCategory("android.intent.category.HOME");
			break;
		default:
			break;
		}
		startActivity(intent);
	}
}

分享標(biāo)題:android之Intent的七大屬性
轉(zhuǎn)載來于:http://www.rwnh.cn/article44/igjphe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、網(wǎng)站排名網(wǎng)站維護(hù)、企業(yè)網(wǎng)站制作微信小程序、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計
鸡泽县| 顺昌县| 旅游| 洛隆县| 湟中县| 荔波县| 靖宇县| 邛崃市| 通山县| 封丘县| 河津市| 通城县| 台东市| 普洱| 义乌市| 繁峙县| 长顺县| 余干县| 青岛市| 股票| 安康市| 泰顺县| 宝清县| 罗城| 利辛县| 乳山市| 平阳县| 九江县| 独山县| 隆子县| 武夷山市| 望城县| 小金县| 东丽区| 凤翔县| 弥渡县| 扶余县| 广德县| 施秉县| 天峻县| 龙里县|