Android开发实现的Intent跳转工具类实例
本文实例讲述了Android开发实现的Intent跳转工具类。分享给大家供大家参考,具体如下:
一、概述
Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。
Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcasts。
二、Intent跳转工具类代码
/**
*进行页面跳转的工具
*
*@authorchen.lin
*
*/
publicclassIntentUtil{
privatestaticfinalStringIMAGE_TYPE="image/*";
privatestaticfinalStringTAG="IntentUtil";
/**
*进行页面跳转
*
*@paramclzz
*/
publicstaticvoidshowIntent(Activitycontext,Class>clzz,String[]keys,String[]values){
Intentintent=newIntent(context,clzz);
if(values!=null&&values.length>0){
for(inti=0;iclzz){
showIntent(context,clzz,null,null);
}
/**
*打电话
*
*@paramintent
*@paramcontext
*@paramtel
*/
publicstaticvoidopenCall(Contextcontext,Stringtel){
tel=tel.replaceAll("-","");
Intentintent=newIntent();
//激活源代码,添加intent对象
intent.setAction("android.intent.action.CALL");
intent.setData(Uri.parse("tel:"+tel));
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
}
/***
*从相册中取图片
*/
publicstaticvoidpickPhoto(Activitycontext,intrequestCode){
Intentintent=newIntent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
context.startActivityForResult(intent,requestCode);
}
/**
*拍照获取图片
*/
publicstaticvoidtakePhoto(Activitycontext,intrequestCode,UricameraUri){
//执行拍照前,应该先判断SD卡是否存在
StringSDState=Environment.getExternalStorageState();
if(SDState.equals(Environment.MEDIA_MOUNTED)){
Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);//"android.media.action.IMAGE_CAPTURE"
Logger.i(TAG,"cameraUri.path------>"+cameraUri.getPath());
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,cameraUri);
context.startActivityForResult(intent,requestCode);
}else{
Toast.makeText(context,"内存卡不存在",Toast.LENGTH_LONG).show();
}
}
/**
*拍照
*
*@paramcontext
*@paramuri
*/
publicstaticvoidtakePhoto(Activitycontext,Uriuri,intrequestCode){
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
Intentintent=newIntent("android.media.action.IMAGE_CAPTURE");
ContentValuesvalues=newContentValues();
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,"内存卡不存在",Toast.LENGTH_LONG).show();
}
}
/**
*本地照片调用
*
*@paramcontext
*@paramrequestCode
*/
publicvoidopenPhotos(Activitycontext,intrequestCode){
if(openPhotosNormal(context,requestCode)//
&&openPhotosBrowser(context,requestCode)//
&&openPhotosFinally(context))
;
}
/**
*这个是找不到相关的图片浏览器,或者相册
*/
privatebooleanopenPhotosFinally(Activitycontext){
Toast.makeText(context,"您的系统没有文件浏览器或则相册支持,请安装!",Toast.LENGTH_LONG).show();
returnfalse;
}
/**
*获取从本地图库返回来的时候的URI解析出来的文件路径
*
*@return
*/
publicstaticStringgetPhotoPathByLocalUri(Contextcontext,Intentdata){
UriphotoUri=data.getData();
String[]filePathColumn={MediaStore.Images.Media.DATA};
Cursorcursor=context.getContentResolver().query(photoUri,filePathColumn,null,null,null);
cursor.moveToFirst();
intcolumnIndex=cursor.getColumnIndex(filePathColumn[0]);
StringpicturePath=cursor.getString(columnIndex);
cursor.close();
returnpicturePath;
}
/**
*PopupMenu打开本地相册.
*/
privatebooleanopenPhotosNormal(Activityactivity,intactResultCode){
Intentintent=newIntent(Intent.ACTION_PICK,null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,IMAGE_TYPE);
try{
activity.startActivityForResult(intent,actResultCode);
}catch(android.content.ActivityNotFoundExceptione){
returntrue;
}
returnfalse;
}
/**
*打开其他的一文件浏览器,如果没有本地相册的话
*/
privatebooleanopenPhotosBrowser(Activityactivity,intrequestCode){
Toast.makeText(activity,"没有相册软件,运行文件浏览器",Toast.LENGTH_LONG).show();
Intentintent=newIntent(Intent.ACTION_GET_CONTENT);//"android.intent.action.GET_CONTENT"
intent.setType(IMAGE_TYPE);//查看类型StringIMAGE_UNSPECIFIED=
//"image/*";
IntentwrapperIntent=Intent.createChooser(intent,null);
try{
activity.startActivityForResult(wrapperIntent,requestCode);
}catch(android.content.ActivityNotFoundExceptione1){
returntrue;
}
returnfalse;
}
/**
*打开照相机
*
*@paramactivity
*当前的activity
*@paramrequestCode
*拍照成功时activityforResult的时候的requestCode
*@paramphotoFile
*拍照完毕时,图片保存的位置
*/
@SuppressLint("SimpleDateFormat")
publicstaticUriopenCamera(Activitycontext,intrequestCode){
//执行拍照前,应该先判断SD卡是否存在
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
SimpleDateFormattimeStampFormat=newSimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
Stringfilename=timeStampFormat.format(newDate());
ContentValuesvalues=newContentValues();
values.put(MediaStore.Images.Media.TITLE,filename);
UriphotoUri=context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);
intent.putExtra(MediaStore.EXTRA_OUTPUT,photoUri);
context.startActivityForResult(intent,requestCode);
returnphotoUri;
}else{
Toast.makeText(context,"内存卡不存在",Toast.LENGTH_LONG).show();
}
returnnull;
}
/**
*选择图片后,获取图片的路径
*
*@paramrequestCode
*@paramdata
*/
publicstaticvoiddoPhoto(Activitycontext,Intentdata,intrequestCode,intvalue,EditTexteditText,
ImageViewimageView,UriphotoUri){
//从相册取图片,有些手机有异常情况,请注意
if(requestCode==value){
if(data==null){
Toast.makeText(context,"选择图片文件出错",Toast.LENGTH_LONG).show();
return;
}
photoUri=data.getData();
if(photoUri==null){
Toast.makeText(context,"选择图片文件出错",Toast.LENGTH_LONG).show();
return;
}
}
String[]pojo={MediaStore.Images.Media.DATA,MediaStore.Images.Media.DISPLAY_NAME};
ContentResolverresolver=context.getContentResolver();
Cursorcursor=resolver.query(photoUri,pojo,null,null,null);
StringpicPath=null;
Stringfilename=null;
if(cursor!=null){
intcolumnIndex=cursor.getColumnIndexOrThrow(pojo[0]);
cursor.moveToFirst();
picPath=cursor.getString(columnIndex);
filename=cursor.getString(cursor.getColumnIndexOrThrow(pojo[1]));
editText.requestFocus();
editText.setText(filename);
cursor.close();
}
Stringdix=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
*//当于加载模式中的singletop,在当前中的activity中转到当前activity,不增加新的
*
*@paramfile
*/
publicstaticvoidopenFile(Contextcontext,Filefile){
Intentintent=newIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//默认的跳转类型,它会重新创建一个新的Activity
intent.setAction(android.content.Intent.ACTION_VIEW);
//调用getMIMEType()来取得MimeType
Stringtype=FileUtil.getMIMEType(file);
//设置intent的file与MimeType
intent.setDataAndType(Uri.fromFile(file),type);
context.startActivity(intent);
}
/**
*截取图片
*
*@paramuri
*@paramoutputX
*@paramoutputY
*@paramrequestCode
*/
publicstaticvoidcropImage(Activitycontext,Uriuri,intoutputX,intoutputY,intrequestCode){
//裁剪图片意图
Intentintent=newIntent("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);
}
/**
*获取图片的旋转角度
*
*@parampath
*@return
*/
publicstaticintreadPictureDegree(Stringpath){
intdegree=0;
try{
ExifInterfaceexifInterface=newExifInterface(path);
intorientation=exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch(orientation){
caseExifInterface.ORIENTATION_ROTATE_90:
degree=90;
break;
caseExifInterface.ORIENTATION_ROTATE_180:
degree=180;
break;
caseExifInterface.ORIENTATION_ROTATE_270:
degree=270;
break;
}
}catch(IOExceptione){
e.printStackTrace();
}
returndegree;
}
/**
*保存文件
*
*@paramcontext
*@paramdata
*@paramrequestCode
*@paramimageView
*/
publicstaticvoidsaveImage(Activitycontext,Intentdata,intrequestCode,ImageViewimageView){
Bitmapphoto=null;
UriphotoUri=data.getData();
cropImage(context,photoUri,500,500,requestCode);
if(photoUri!=null){
photo=BitmapFactory.decodeFile(photoUri.getPath());
}
if(photo==null){
Bundleextra=data.getExtras();
if(extra!=null){
photo=(Bitmap)extra.get("data");
ByteArrayOutputStreamstream=newByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG,100,stream);
}
}
imageView.setImageBitmap(photo);
}
/**
*保存照相后的图片
*
*@paramcontext
*@paramrequestCode
*@paramspath
*@return
*/
publicstaticbooleansaveCamera(Activitycontext,Intentdata,UricameraUri,EditTexteditText,
ImageViewimageView){
try{
finalBundleextras=data.getExtras();
if(extras!=null){
Bitmapphoto=extras.getParcelable("data");
imageView.setImageBitmap(photo);
}
if(cameraUri!=null){
Stringpath=cameraUri.getPath();
Logger.i(TAG,"path-->"+path);
Stringfilename=path.substring(path.lastIndexOf("/")+1,path.length());
editText.setText(filename);
}
}catch(Exceptione){
e.printStackTrace();
returnfalse;
}
returntrue;
}
}
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。