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程序设计有所帮助。