編輯:關於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文件浏覽器查看wifi密碼。ES文件浏覽器是一個能管理手機本地、局域網共享、FTP和藍牙文件的管理器。其實就是一個電腦和手機網絡文件傳輸軟件。可大
android---粒子雨效果的實現
剛學習了自定義view,就按照極客學院的教程做了粒子雨效果,主要用到繪畫線條和多線程,其中的抽象類設計方法值得學習,1.baseview主要是設定雨滴要實現的動作,只是先
安卓更新軟件功能的實現 (不使用webview)
首先明確流程 既然實現自動更新,我們首先必須讓我們的應用知道是否存在新版本的軟件,因此我們可以在自己的網站上放置配置文件,存放軟件的版本信息: 2
Android popupwindow簡單使用方法介紹
先看下效果 1.首頁package com.yskj.jh.demopopupwindow;import android.content.Context;import a