版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】如何在Android中編寫(xiě)一個(gè)Intent跳轉(zhuǎn)工具類
這篇文章給大家介紹如何在Android中編寫(xiě)一個(gè)Intent跳轉(zhuǎn)工具類,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。一、概述Intent的中文意思是“意圖,意向”,在Android中提供了Intent機(jī)制來(lái)協(xié)助應(yīng)用間的交互與通訊,Intent負(fù)責(zé)對(duì)應(yīng)用中一次操作的動(dòng)作、動(dòng)作涉及數(shù)據(jù)、附加數(shù)據(jù)進(jìn)行描述,Android則根據(jù)此Intent的描述,負(fù)責(zé)找到對(duì)應(yīng)的組件,將Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。Intent不僅可用于應(yīng)用程序之間,也可用于應(yīng)用程序內(nèi)部的Activity/Service之間的交互。因此,可以將Intent理解為不同組件之間通信的“媒介”專門(mén)提供組件互相調(diào)用的相關(guān)信息。Intent可以啟動(dòng)一個(gè)Activity,也可以啟動(dòng)一個(gè)Service,還可以發(fā)起一個(gè)廣播Broadcasts。二、Intent跳轉(zhuǎn)工具類代碼/**
*
進(jìn)行頁(yè)面跳轉(zhuǎn)的工具
*
*
@author
chen.lin
*
*/
public
class
IntentUtil
{
private
static
final
String
IMAGE_TYPE
=
"image/*";
private
static
final
String
TAG
=
"IntentUtil";
/**
*
進(jìn)行頁(yè)面跳轉(zhuǎn)
*
*
@param
clzz
*/
public
static
void
showIntent(Activity
context,
Class<?>
clzz,
String[]
keys,
String[]
values)
{
Intent
intent
=
new
Intent(context,
clzz);
if
(values
!=
null
&&
values.length
>
0)
{
for
(int
i
=
0;
i
<
values.length;
i++)
{
if
(!TextUtils.isEmpty(keys[i])
&&
!TextUtils.isEmpty(values[i]))
{
intent.putExtra(keys[i],
values[i]);
}
}
}
context.startActivity(intent);
}
public
static
void
showIntent(Activity
context,
Class<?>
clzz)
{
showIntent(context,
clzz,
null,
null);
}
/**
*
打電話
*
*
@param
intent
*
@param
context
*
@param
tel
*/
public
static
void
openCall(Context
context,
String
tel)
{
tel
=
tel.replaceAll("-",
"");
Intent
intent
=
new
Intent();
//
激活源代碼,添加intent對(duì)象
intent.setAction("ent.action.CALL");
intent.setData(Uri.parse("tel:"
+
tel));
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
}
/***
*
從相冊(cè)中取圖片
*/
public
static
void
pickPhoto(Activity
context,
int
requestCode)
{
Intent
intent
=
new
Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
context.startActivityForResult(intent,
requestCode);
}
/**
*
拍照獲取圖片
*/
public
static
void
takePhoto(Activity
context,
int
requestCode,
Uri
cameraUri)
{
//
執(zhí)行拍照前,應(yīng)該先判斷SD卡是否存在
String
SDState
=
Environment.getExternalStorageState();
if
(SDState.equals(Environment.MEDIA_MOUNTED))
{
Intent
intent
=
new
Intent(MediaStore.ACTION_IMAGE_CAPTURE);//
"android.media.action.IMAGE_CAPTURE"
Logger.i(TAG,
"cameraUri.path>"
+
cameraUri.getPath());
intent.putExtra(vider.MediaStore.EXTRA_OUTPUT,
cameraUri);
context.startActivityForResult(intent,
requestCode);
}
else
{
Toast.makeText(context,
"內(nèi)存卡不存在",
Toast.LENGTH_LONG).show();
}
}
/**
*
拍照
*
*
@param
context
*
@param
uri
*/
public
static
void
takePhoto(Activity
context,
Uri
uri,
int
requestCode)
{
if
(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
Intent
intent
=
new
Intent("android.media.action.IMAGE_CAPTURE");
ContentValues
values
=
new
ContentValues();
values.put(MediaStore.Images.Media.DISPLAY_NAME,
String.valueOf(System.currentTimeMillis())
+
".jpg");
values.put(MediaStore.Images.Media.MIME_TYPE,
"image/*");
uri
=
context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
values);
//
intent.putExtra(MediaStore.Images.Media.ORIENTATION,
0);
intent.putExtra(MediaStore.EXTRA_OUTPUT,
uri);
context.startActivityForResult(intent,
requestCode);
}
else
{
Toast.makeText(context,
"內(nèi)存卡不存在",
Toast.LENGTH_LONG).show();
}
}
/**
*
本地照片調(diào)用
*
*
@param
context
*
@param
requestCode
*/
public
void
openPhotos(Activity
context,
int
requestCode)
{
if
(openPhotosNormal(context,
requestCode)
//
&&
openPhotosBrowser(context,
requestCode)
//
&&
openPhotosFinally(context))
;
}
/**
*
這個(gè)是找不到相關(guān)的圖片瀏覽器,或者相冊(cè)
*/
private
boolean
openPhotosFinally(Activity
context)
{
Toast.makeText(context,
"您的系統(tǒng)沒(méi)有文件瀏覽器或則相冊(cè)支持,請(qǐng)安裝!",
Toast.LENGTH_LONG).show();
return
false;
}
/**
*
獲取從本地圖庫(kù)返回來(lái)的時(shí)候的URI解析出來(lái)的文件路徑
*
*
@return
*/
public
static
String
getPhotoPathByLocalUri(Context
context,
Intent
data)
{
Uri
photoUri
=
data.getData();
String[]
filePathColumn
=
{
MediaStore.Images.Media.DATA
};
Cursor
cursor
=
context.getContentResolver().query(photoUri,
filePathColumn,
null,
null,
null);
cursor.moveToFirst();
int
columnIndex
=
cursor.getColumnIndex(filePathColumn[0]);
String
picturePath
=
cursor.getString(columnIndex);
cursor.close();
return
picturePath;
}
/**
*
PopupMenu打開(kāi)本地相冊(cè).
*/
private
boolean
openPhotosNormal(Activity
activity,
int
actResultCode)
{
Intent
intent
=
new
Intent(Intent.ACTION_PICK,
null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
IMAGE_TYPE);
try
{
activity.startActivityForResult(intent,
actResultCode);
}
catch
(android.content.ActivityNotFoundException
e)
{
return
true;
}
return
false;
}
/**
*
打開(kāi)其他的一文件瀏覽器,如果沒(méi)有本地相冊(cè)的話
*/
private
boolean
openPhotosBrowser(Activity
activity,
int
requestCode)
{
Toast.makeText(activity,
"沒(méi)有相冊(cè)軟件,運(yùn)行文件瀏覽器",
Toast.LENGTH_LONG).show();
Intent
intent
=
new
Intent(Intent.ACTION_GET_CONTENT);
//
"ent.action.GET_CONTENT"
intent.setType(IMAGE_TYPE);
//
查看類型
String
IMAGE_UNSPECIFIED
=
//
"image/*";
Intent
wrapperIntent
=
Intent.createChooser(intent,
null);
try
{
activity.startActivityForResult(wrapperIntent,
requestCode);
}
catch
(android.content.ActivityNotFoundException
e1)
{
return
true;
}
return
false;
}
/**
*
打開(kāi)照相機(jī)
*
*
@param
activity
*
當(dāng)前的activity
*
@param
requestCode
*
拍照成功時(shí)activity
forResult
的時(shí)候的requestCode
*
@param
photoFile
*
拍照完畢時(shí),圖片保存的位置
*/
@SuppressLint("SimpleDateFormat")
public
static
Uri
openCamera(Activity
context,
int
requestCode)
{
//
執(zhí)行拍照前,應(yīng)該先判斷SD卡是否存在
if
(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
Intent
intent
=
new
Intent(MediaStore.ACTION_IMAGE_CAPTURE);
SimpleDateFormat
timeStampFormat
=
new
SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
String
filename
=
timeStampFormat.format(new
Date());
ContentValues
values
=
new
ContentValues();
values.put(MediaStore.Images.Media.TITLE,
filename);
Uri
photoUri
=
context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
values);
intent.putExtra(MediaStore.EXTRA_OUTPUT,
photoUri);
context.startActivityForResult(intent,
requestCode);
return
photoUri;
}
else
{
Toast.makeText(context,
"內(nèi)存卡不存在",
Toast.LENGTH_LONG).show();
}
return
null;
}
/**
*
選擇圖片后,獲取圖片的路徑
*
*
@param
requestCode
*
@param
data
*/
public
static
void
doPhoto(Activity
context,
Intent
data,
int
requestCode,
int
value,
EditText
editText,
ImageView
imageView,
Uri
photoUri)
{
//
從相冊(cè)取圖片,有些手機(jī)有異常情況,請(qǐng)注意
if
(requestCode
==
value)
{
if
(data
==
null)
{
Toast.makeText(context,
"選擇圖片文件出錯(cuò)",
Toast.LENGTH_LONG).show();
return;
}
photoUri
=
data.getData();
if
(photoUri
==
null)
{
Toast.makeText(context,
"選擇圖片文件出錯(cuò)",
Toast.LENGTH_LONG).show();
return;
}
}
String[]
pojo
=
{
MediaStore.Images.Media.DATA,
MediaStore.Images.Media.DISPLAY_NAME
};
ContentResolver
resolver
=
context.getContentResolver();
Cursor
cursor
=
resolver.query(photoUri,
pojo,
null,
null,
null);
String
picPath
=
null;
String
filename
=
null;
if
(cursor
!=
null)
{
int
columnIndex
=
cursor.getColumnIndexOrThrow(pojo[0]);
cursor.moveToFirst();
picPath
=
cursor.getString(columnIndex);
filename
=
cursor.getString(cursor.getColumnIndexOrThrow(pojo[1]));
editText.requestFocus();
editText.setText(filename);
cursor.close();
}
String
dix
=
filename.substring(filename.lastIndexOf("."),
filename.length());
if
(filename
!=
null
&&
(dix.equalsIgnoreCase(".png")
||
dix.equalsIgnoreCase(".jpg")
||
dix.equalsIgnoreCase(".gif")
||
dix.equalsIgnoreCase(".bmp")
||
dix.equalsIgnoreCase(".jpeg")
||
dix
.equalsIgnoreCase(".tiff")))
{
//
lastIntent.putExtra(KEY_PHOTO_PATH,
picPath);
imageView.setVisibility(View.VISIBLE);
imageView.setImageURI(Uri.parse(picPath));
}
else
{
imageView.setVisibility(View.GONE);
Toast.makeText(context,
"選擇圖片文件不正確",
Toast.LENGTH_LONG).show();
}
}
/**
*
FLAG_ACTIVITY_SINGLE_TOP
*
//當(dāng)于加載模式中的singletop,在當(dāng)前中的activity中轉(zhuǎn)到當(dāng)前activity,不增加新的
*
*
@param
file
*/
public
static
void
openFile(Context
context,
File
file)
{
Intent
intent
=
new
Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//
默認(rèn)的跳轉(zhuǎn)類型,它會(huì)重新創(chuàng)建一個(gè)新的Activity
intent.setAction(android.content.Intent.ACTION_VIEW);
//
調(diào)用getMIMEType()來(lái)取得MimeType
String
type
=
FileUtil.getMIMEType(file);
//
設(shè)置intent的file與MimeType
intent.setDataAndType(Uri.fromFile(file),
type);
context.startActivity(intent);
}
/**
*
截取圖片
*
*
@param
uri
*
@param
outputX
*
@param
outputY
*
@param
requestCode
*/
public
static
void
cropImage(Activity
context,
Uri
uri,
int
outputX,
int
outputY,
int
requestCode)
{
//
裁剪圖片意圖
Intent
intent
=
new
Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri,
"image/*");
intent.putExtra("crop",
"true");
//
裁剪框的比例,1:1
intent.putExtra("aspectX",
1);
intent.putExtra("aspectY",
1);
//
裁剪后輸出圖片的尺寸大小
intent.putExtra("outputX",
outputX);
intent.putExtra("outputY",
outputY);
//
圖片格式
intent.putExtra("outputFormat",
"JPEG");
intent.putExtra("noFaceDetection",
true);
intent.putExtra("return-data",
true);
context.startActivityForResult(intent,
requestCode);
}
/**
*
獲取圖片的旋轉(zhuǎn)角度
*
*
@param
path
*
@return
*/
public
static
int
readPictureDegree(String
path)
{
int
degree
=
0;
try
{
ExifInterface
exifInterface
=
new
ExifInterface(path);
int
orientation
=
exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch
(orientation)
{
case
ExifInterface.ORIENTATION_ROTATE_90:
degree
=
90;
break;
case
ExifInterface.ORIENTATION_ROTATE_180:
degree
=
180;
break;
case
ExifInterface.ORIENTATION_ROTATE_270:
degree
=
270;
break;
}
}
catch
(IOException
e)
{
e.printStackTrace();
}
return
degree;
}
/**
*
保存文件
*
*
@param
context
*
@param
data
*
@param
requestCode
*
@param
imageView
*/
public
static
void
saveImage(Activity
context,
Intent
data,
int
requestCode,
ImageView
imageView)
{
Bitmap
photo
=
null;
Uri
photoUri
=
data.getData();
cropImage(context,
photoUri,
500,
500,
requestCode);
if
(photoUri
!=
null)
{
photo
=
BitmapFactory.decodeFile
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版養(yǎng)雞場(chǎng)人力資源合同:養(yǎng)雞場(chǎng)員工招聘與培訓(xùn)協(xié)議3篇
- 2024年標(biāo)準(zhǔn)職工租賃房協(xié)議版B版
- 2024年度事業(yè)單位聘用合同中的績(jī)效評(píng)估體系設(shè)計(jì)3篇
- 2024年度電子信息技術(shù)研發(fā)資金借款合同2篇
- 2024年度商場(chǎng)弱電改造工程承包合同模板3篇
- 2024年度中小學(xué)全科私人教師輔導(dǎo)協(xié)議2篇
- 2024年度蔬菜原料長(zhǎng)期供應(yīng)與質(zhì)量標(biāo)準(zhǔn)合同2篇
- 2024年度共享辦公空間租賃合同2篇
- 2024年農(nóng)業(yè)園區(qū)場(chǎng)地租賃合同范本3篇
- 2024年新能源汽車充電服務(wù)與電子合同2篇
- 愚公移山英文 -中國(guó)故事英文版課件
- 國(guó)開(kāi)經(jīng)濟(jì)學(xué)(本)1-14章練習(xí)試題及答案
- 實(shí)驗(yàn)室內(nèi)審員資格測(cè)驗(yàn)題及答案
- 工程量清單項(xiàng)目編碼完整版
- 高三數(shù)學(xué)考試情況分析及復(fù)習(xí)建議
- 光學(xué)設(shè)計(jì)與光學(xué)工藝
- 項(xiàng)目工程質(zhì)量管理體系
- 家長(zhǎng)進(jìn)課堂(課堂PPT)
- 定喘神奇丹_辨證錄卷四_方劑樹(shù)
- 貨物運(yùn)輸通知單
- 部編版一年級(jí)上冊(cè)形近字組詞(共3頁(yè))
評(píng)論
0/150
提交評(píng)論