【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】如何在Android中編寫(xiě)一個(gè)Intent跳轉(zhuǎn)工具類_第1頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】如何在Android中編寫(xiě)一個(gè)Intent跳轉(zhuǎn)工具類_第2頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】如何在Android中編寫(xiě)一個(gè)Intent跳轉(zhuǎn)工具類_第3頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】如何在Android中編寫(xiě)一個(gè)Intent跳轉(zhuǎn)工具類_第4頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】如何在Android中編寫(xiě)一個(gè)Intent跳轉(zhuǎn)工具類_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論