編輯:關於Android編程
前言:Android中的Intent中主要有兩種:即系統Intent和自定義Intent
系統Intent:
一,基本知識:
(1)解釋:意圖,意圖機制,是連接組件的管理者。
(2)Intent對象的基本構成:如:在下雨天,我喜歡吃肉,特別是雞肉
Action:表達動作,可通過Intent.setAction()設置,如例句中的:謂語--吃
常用的有: 常用於:
Intent.ACTION_WEB_SEARCH----浏覽器搜索;
new Intent(Intent.ACTION_VIEW , uri); //通過Intent.ACTION_VIEW來顯示此Uri的內容
Intent.ACTION_DIAL ---- 撥號界面
Intent.ACTION_CALL ---- 直接撥號
Intent.ACTION_SEND --- 發送,如短信,郵件等
Intent.ACTION_DELETE---- 刪除數據
Intent.ACTION_GET_CONTENT ----獲取內容,如圖庫
Intent.ACTION_VIEW:這個用的最多,功能很多,,具體略,
Data:做特指的賓語,如雞肉
設置方式:Intent.setData或Intent.setDataAndType
讀取方式:Intent.getData
常用URI表示:
file:///sdcard/a.data 代表本地sdcard下的a.data文件
content://com.duguhome.providers.a/1 代表數據源組件com.duguhome.providers.a中id為1的數據
http://baidu.com/a.data -- 代表baidu.com下的a.data文件
Type:泛指的賓語,如,肉
設置 :Intent.setType或Intent.setDataAndType
獲取 :Intent.getType()
可以用通配符*表示,如, image/*----圖片; image/jpg ---- jpg格式的圖片 text/plain : 純文本 text/html : HTML文檔 text/* : text類型 video/mpeg : MPEG動畫 還有:(*/*)
注意:Data,Type誰後設置誰做主,若需一起做主人,則,需用setDataAndType()方法
Category :約束條件,如在下雨天,Intent.addCategory可為intent添加多個Category項,Intent.getCategories獲取
Component :目標組件,一旦使用了,則,intent對象變成只是負責傳遞信息的載體
Extras:Intent中數據傳輸的載體,按鍵值對存取,getExtras,setExtra方法
Flags:標志,如,設置為
Intent.FLAG_ACTIVITY_VIEW_NEW_TASK:組件將會嘗試去構造新的任務目標組件,而不是默認的原有組件,
Intent.setFlags ,Intent.addFlags方法
總之,一系列set方法和get方法,還有少數的add方法
二,使用:
例子(1):google搜索,根據URL調用浏覽器,電話撥打調用,發送短信彩信和郵件
(1)google搜索:
關鍵代碼:
//設置Intent對象的action為ACTION_WEB_SEARCH:代表通過Google浏覽器搜索 intent.setAction(Intent.ACTION_WEB_SEARCH); //設置Intent對象的附加內容為SearchManager.QUERY :代表搜索關鍵字 intent.putExtra(SearchManager.QUERY , Et.getText().toString()); startActivity(intent);
Uri uri = Uri.parse("http://" + url); intent = new Intent(Intent.ACTION_VIEW , uri); //通過Intent.ACTION_VIEW來顯示此Uri的內容 startActivity(intent);(3)電話撥打:
Uri uri = Uri.parse("tel:" + phonenum); //intent = new Intent(Intent.ACTION_CALL , uri);直接撥打 //下面是調到撥號界面 intent = new Intent(Intent.ACTION_DIAL,uri); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
(4)發送短信和彩信和郵件:
短信:
intent = new Intent(Intent.ACTION_VIEW) ; intent.putExtra("sms_body" , msg); intent.setType("vnd.android-dir/mms-sms"); startActivity(intent);
彩信:
Uri uri = Uri.parse("content://media/external/images/media/01"); Intent intent = new Intent(Intent.ACTION_SEND); //設置Action intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //添加Flags intent.putExtra(Intent.EXTRA_STREAM , uri ); //設置intent的附件參數為之前的uri圖片 intent.putExtra("subject" , sub); //分別設置主題,號碼,內容 intent.putExtra("address" , number); intent.putExtra("sms_body" , msg); intent.putExtra(Intent.EXTRA_TEXT , "通過彩信向你問好!"); //設置intent的彩信附加文字 intent.setType("image/*"); //彩信附件類型 //設置intent的彩信發送activity intent.setClassName("com.android.mms" , "com.android.mms.ui.ComposeMessageActivity"); startActivity(intent);
Intent intent = new Intent(Intent.ACTION_SEND); //設置Action // intent.setType("text/plain"); 模擬器使用用這行 intent.setType("message/rfc822"); intent.putExtra(Intent.EXTRA_EMAIL , new String[]{email}); //email為郵箱地址 intent.putExtra(Intent.EXTRA_SUBJECT , sub); //主題 intent.putExtra(Intent.EXTRA_TEXT , msg); //內容 startActivity(Intent.createChooser(intent , "請選擇發送郵件的客戶端"));
google搜索,根據URL調用浏覽器,電話撥打調用,發送短信代碼放在一起了:
布局文件:activity_first:4個EditText,4個按鈕,分別用於輸入和啟動
主類:FirstActivity,調用系統Intent去實現,代碼如下:
package testsdcard.com.maiyu.s05_092.activity; import android.app.Activity; import android.app.SearchManager; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import testsdcard.com.maiyu.s05_092.R; /** * Created by maiyu on 2016/7/19. */ public class FirstActivity extends Activity { private EditText Et , Et2 , Et3 , Et4; private Button Btn , Btn2 , Btn3 , Btn4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); findView(); //為控件綁定id setListener(); //設置監聽 } //設置監聽器 private void setListener() { Btn.setOnClickListener(mylistener); Btn2.setOnClickListener(mylistener); Btn3.setOnClickListener(mylistener); Btn4.setOnClickListener(mylistener); } //自定義監聽器 View.OnClickListener mylistener = new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent() ; switch (view.getId()){ case R.id.Btn : //google搜索內容 //設置Intent對象的action為ACTION_WEB_SEARCH:代表通過Google浏覽器搜索 intent.setAction(Intent.ACTION_WEB_SEARCH); //設置Intent對象的附加內容為SearchManager.QUERY :代表搜索關鍵字 intent.putExtra(SearchManager.QUERY , Et.getText().toString()); startActivity(intent); break; case R.id.Btn2 : //URL網址搜索 String url = Et2.getText().toString(); if(!"".equals(url)){ //判斷輸入是否為空 Uri uri = Uri.parse("http://" + url); //一般用戶輸入時不會加http://,然後通過處理網址生成Uri對象 intent = new Intent(Intent.ACTION_VIEW , uri); //通過Intent.ACTION_VIEW來顯示此Uri的內容 startActivity(intent); }else { Toast.makeText(FirstActivity.this , "請輸入正確的URL網址" , Toast.LENGTH_SHORT).show(); } break; case R.id.Btn3 : //電話撥打 String phonenum = Et3.getText().toString(); if(!"".equals(phonenum)){ Uri uri = Uri.parse("tel:" + phonenum); //intent = new Intent(Intent.ACTION_CALL , uri);直接撥打 //下面是調到撥號界面 intent = new Intent(Intent.ACTION_DIAL,uri); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }else { Toast.makeText(FirstActivity.this , "請輸入電話號碼",Toast.LENGTH_SHORT).show(); } break; //短信分享內容 case R.id.Btn4 : String msg = Et4.getText().toString(); if(!"".equals(msg)){ intent = new Intent(Intent.ACTION_VIEW) ; intent.putExtra("sms_body" , msg); intent.setType("vnd.android-dir/mms-sms"); startActivity(intent); }else{ Toast.makeText(FirstActivity.this, "請輸入要分享的短信內容...", Toast.LENGTH_SHORT).show(); } break; default: break; } } }; //為各個控件綁定id private void findView() { Et = (EditText)findViewById(R.id.Et); Et2 = (EditText)findViewById(R.id.Et2); Et3 = (EditText)findViewById(R.id.Et3); Et4 = (EditText)findViewById(R.id.Et4); Btn = (Button)findViewById(R.id.Btn); Btn2 = (Button)findViewById(R.id.Btn2); Btn3 = (Button)findViewById(R.id.Btn3); Btn4 = (Button)findViewById(R.id.Btn4); } }
彩信和郵件完整代碼:
布局:三個EditText接受(彩信:電話號碼,主題,內容;郵件:郵箱,主題,內容,)一個啟動按鈕,內容相似,這裡
只給出彩信的布局:
package testsdcard.com.maiyu.s05_092.activity; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import testsdcard.com.maiyu.s05_092.R; /** * Created by maiyu on 2016/7/19. */ public class SecondActivity extends Activity { private Button btn ; //定義按鈕控件 private EditText EtMsg , EtNum , EtSub ; //定義內容,號碼,主題 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); findView(); //為控件綁定id setListener(); //為控件設置監聽 } //為控件設置監聽 private void setListener() { btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //分別得到要發送的彩信的:內容,號碼,主題 String msg = EtMsg.getText().toString(); String number = EtNum.getText().toString(); String sub = EtSub.getText().toString(); //判空 if(!"".equals(msg) && !"".equals(number) && !"".equals(sub)){ //定義了用戶系統的1號圖片的uri,uri格式: "content://"、數據的路徑、標示ID(可選) //通過DDMS,我們在/data/data/com.android.providers.media下找到數據庫文件 //打開external.db文件進一步查看:在media表格下,可以看到文件路徑(_data)和Uri的標示ID(_id)的對應關系。 Uri uri = Uri.parse("content://media/external/images/media/01"); Intent intent = new Intent(Intent.ACTION_SEND); //設置Action intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //添加Flags intent.putExtra(Intent.EXTRA_STREAM , uri ); //設置intent的附件參數為之前的uri圖片 intent.putExtra("subject" , sub); //分別設置主題,號碼,內容 intent.putExtra("address" , number); intent.putExtra("sms_body" , msg); intent.putExtra(Intent.EXTRA_TEXT , "通過彩信向你問好!"); //設置intent的彩信附加文字 intent.setType("image/*"); //彩信附件類型 //設置intent的彩信發送activity intent.setClassName("com.android.mms" , "com.android.mms.ui.ComposeMessageActivity"); startActivity(intent); }else { Toast.makeText(SecondActivity.this , "彩信號碼或內容為空,,," ,Toast.LENGTH_SHORT).show(); } } }); } //為控件綁定id private void findView() { btn = (Button)findViewById(R.id.Btn); EtMsg = (EditText)findViewById(R.id.EtMsg); EtSub = (EditText)findViewById(R.id.EtSub); EtNum = (EditText)findViewById(R.id.EtNum); } }
package testsdcard.com.maiyu.s05_092.activity; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import testsdcard.com.maiyu.s05_092.R; /** * Created by maiyu on 2016/7/19. */ public class ThirdActivity extends Activity { private Button btn ; //定義按鈕控件 private EditText EtMsg , EtEmail , EtSub ; //定義內容,號碼,主題 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_third); findView(); //為控件綁定id setListener(); //為控件設置監聽 } //為控件設置監聽 private void setListener() { btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //分別得到要發送的彩信的:內容,號碼,主題 String msg = EtMsg.getText().toString(); String email = EtEmail.getText().toString(); String sub = EtSub.getText().toString(); //判空 if(!"".equals(msg) && !"".equals(email) && !"".equals(sub)){ Intent intent = new Intent(Intent.ACTION_SEND); //設置Action // intent.setType("text/plain"); 模擬器使用用這行 intent.setType("message/rfc822"); intent.putExtra(Intent.EXTRA_EMAIL , new String[]{email}); //email為郵箱地址 intent.putExtra(Intent.EXTRA_SUBJECT , sub); //主題 intent.putExtra(Intent.EXTRA_TEXT , msg); //內容 startActivity(Intent.createChooser(intent , "請選擇發送郵件的客戶端")); }else { Toast.makeText(ThirdActivity.this , "彩信號碼或內容或主題為空,,," ,Toast.LENGTH_SHORT).show(); } } }); } //為控件綁定id private void findView() { btn = (Button)findViewById(R.id.Btn); EtMsg = (EditText)findViewById(R.id.EtMsg); EtSub = (EditText)findViewById(R.id.EtSub); EtEmail = (EditText)findViewById(R.id.EtEmail); } }
三,另一類例子:
(1)啟動播放音樂
intent = new Intent(Intent.ACTION_VIEW); //設置action屬性為Intent.ACTION_VIEW Uri uri = Uri.parse("file:///sdcard/五月天-溫柔.mp3"); //定義sdcard下的song.mp3文件的uri intent.setDataAndType(uri , "audio/mp3"); //設置intent的數據類型為audio/mp3, startActivity(intent);
//安裝應用 intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse("file://" + "/sdcard/XMNotes.apk") , "application/vnd.android.package-archive"); startActivity(intent); //卸載應用 // Uri packageURI = Uri.parse("package:指定的uri"); //要卸載的軟件的包名uri // Intent uninstallIntent = new Intent(Intent.ACTION_DELETE); // startActivity(uninstallIntent);
(3)調用攝像機和打開圖庫和打開錄音:這裡用startActivityForResult(意圖對象,請求碼);
請求碼----requestCode:自己設置
請求結果----- resultCode :如若正確返回,則返回RESULT_OK
打開攝像機:
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent , 1);在onActivityResult方法中:
if(requestCode == 1){ //若果requestCode為1, if(resultCode == RESULT_OK){ //得到返回的處理狀態,成功得到照片返回RESULT_OK //取出data對象中的數據data的值,並化為Bitmap設置在Iv上 Bitmap bmPhoto = (Bitmap)data.getExtras().get("data"); Iv.setImageBitmap(bmPhoto); } }
intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent , 2);
if(requestCode == 2){ //如果requestCode為2 if(resultCode == RESULT_OK){ //返回處理結果成功 Uri uri = data.getData(); ///取得data對象中的數據 //獲取當前activity的ContentResolver對象 ContentResolver cr = this.getContentResolver(); try{ //通過ContentResolver得到相應圖片並顯示出來 Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri)); Iv.setImageBitmap(bitmap); }catch(FileNotFoundException e){ e.printStackTrace(); } } }
intent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); startActivityForResult(intent , 1);在onActivityResult方法中:
if(requestCode == 1){ if(resultCode == RESULT_OK){ //得到錄音的音頻文件及路徑 String dataFile = data.getDataString(); String dataUri = getIntent().getDataString(); Toast.makeText(FourActivity.this , "dataFile is "+dataFile + "dataUri is "+ dataUri, Toast.LENGTH_SHORT).show(); } }
打開相機和圖庫的完整代碼如下:
布局:
activity_five:一個imageView用於顯示,兩個按鈕用於啟動,即打開相機,打開圖庫
package testsdcard.com.maiyu.s05_092.activity; import android.app.Activity; import android.content.ContentResolver; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import java.io.FileNotFoundException; import testsdcard.com.maiyu.s05_092.R; /** * Created by maiyu on 2016/7/19. */ public class FiveActivity extends Activity { private Button btn , btn2; //按鈕, private TextView Tv ; //textView private ImageView Iv ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_five); findView(); //為控件綁定id setListener(); //為控件設置監聽 } //為控件設置監聽 private void setListener() { btn.setOnClickListener(mylistener); btn2.setOnClickListener(mylistener); } //自定義監聽器mylistener View.OnClickListener mylistener = new View.OnClickListener() { @Override public void onClick(View view) { Intent intent ; switch (view.getId()){ case R.id.Btn : //打開攝像機 intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent , 1); break; case R.id.Btn2 : //打開圖庫 intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent , 2); break; default: break; } } }; //為各個控件綁定id private void findView() { btn = (Button)findViewById(R.id.Btn); btn2 = (Button)findViewById(R.id.Btn2); Tv = (TextView)findViewById(R.id.Tv); Iv = (ImageView)findViewById(R.id.Iv); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == 1){ //若果requestCode為1, if(resultCode == RESULT_OK){ //得到返回的處理狀態,成功得到照片返回RESULT_OK //取出data對象中的數據data的值,並化為Bitmap設置在Iv上 Bitmap bmPhoto = (Bitmap)data.getExtras().get("data"); Iv.setImageBitmap(bmPhoto); } } else if(requestCode == 2){ //如果requestCode為2 if(resultCode == RESULT_OK){ //返回處理結果成功 Uri uri = data.getData(); ///取得data對象中的數據 //獲取當前activity的ContentResolver對象 ContentResolver cr = this.getContentResolver(); try{ //通過ContentResolver得到相應圖片並顯示出來 Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri)); Iv.setImageBitmap(bitmap); }catch(FileNotFoundException e){ e.printStackTrace(); } } } } }添加權限:
如何用ES文件浏覽器查看wifi密碼。ES文件浏覽器是一個能管理手機本地、局域網共享、FTP和藍牙文件的管理器。其實就是一個電腦和手機網絡文件傳輸軟件。可大
剛學習了自定義view,就按照極客學院的教程做了粒子雨效果,主要用到繪畫線條和多線程,其中的抽象類設計方法值得學習,1.baseview主要是設定雨滴要實現的動作,只是先
首先明確流程 既然實現自動更新,我們首先必須讓我們的應用知道是否存在新版本的軟件,因此我們可以在自己的網站上放置配置文件,存放軟件的版本信息: 2
先看下效果 1.首頁package com.yskj.jh.demopopupwindow;import android.content.Context;import a