如何设置文件不具有真实使用意图图的相机ACTION

他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)  本篇博文主要介绍Intent的相关概念,以及Intent在Activity中的使用方法。
1.Intent的实现过程
  在Android中,Intent不仅可用于应用程序之间的交互,也可用于应用程序内部的Activity/Service之间的交互。
  Intent负责对应用中一次操作进行描述,描述内容包括动作以及动作所涉及的数据,Android中的Intent机制则根据此描述,找到对应的组件,将Intent传递给该被调用组件,完成对组件的一次调用。
  这便是Intent的实现过程,可见,在Intent中提供了组件互相调用的相关信息,实现了调用者与被调用者之间的解耦。
2.Intent的应用场合
  归纳起来,Intent的应用场合主要有以下三种:
2.1启动一个Activity
  (1)Activity.startActivity(Intent&intent);  //启动一个Activity
  (2)Activity.startActivityForResult(Intent&intent,&int&requestCode);  //启动一个带请求码的Activity,当该Activity结束时将回调原Activity的onActivityResult()方法,并返回一个结果码。
2.2启动一个Service
  (1)Context.startService(Intent&service);&
  (2)Context.bindService(Intent&service,&ServiceConnection&conn,&int&flags);&
2.3启动一个Broadcast
  (1)sendBroadcast(Intent&intent);&
&    sendBroadcastAsUser(Intent&intent,&UserHandle&user);&
  (2)sendStickyBroadcast(Intent&intent);&
&&&&&  & sendStickyBroadcastAsUser(Intent&intent,&UserHandle&user);&
  (3)sendOrderedBroadcast(Intent&intent,&String&receiverPermission);&
    & sendOrderedBroadcastAsUser(Intent&intent,&UserHandle&user,&String&receiverPermission,
&BroadcastReceiver&resultReceiver,Handler&scheduler,&int&initialCode,&String&initialData,&Bundle&initialExtras);&
3.Intent属性设置
  Intent的属性设置包括:Action(要执行的动作)、Data(执行动作所操作的数据)、Type(显式的指定Intent的数据类型)、Category(执行动作的附加信息)、Component(指定Intent目标组件的类名称)、Extras(其它所有附加信息的集合)。&&&&
3.1&Action(要执行的动作)
  在SDK中定义了一系列标准动作,其中的一部分如图1所示。
图1&部分标准动作
  其中,ACTION_CALL表示调用拨打电话的应用;ACTION_EDIT表示调用编辑器;ACTION_SYNC表示同步数据。
3.2&Data(执行动作所操作的数据)
  在Intent中,Data使用指向数据的URI来表示。比如,在联系人应用中,指向联系人列表的URI是content://contacts/people/。
3.3&Type(显式的指定Intent的数据类型)
  对于不同的动作,其URI数据的类型是不同的。
  通常,Intent的数据类型能够根据其数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型。
3.4&Category(执行动作的附加信息)
  Category表示执行动作的附加信息。比如,当我们想要让所执行的动作被接收后,作为顶级应用而位于其他所有应用的最上层,并可以使用附加信息LAUNCHER_CATEGORY来实现。&
3.5&Component(指定Intent目标组件的类名称)
  Component用于指定Intent目标组件的类名称。通常,Android会根据Intent&中所包含的其它属性信息(比如Action、Data/Type、Category)进行查找,并找到一个与之匹配的目标组件。但是,如果我们设置了Component属性,明确的指定了Intent目标组件的类名称,那么上述查找过程将不需要执行。&
3.6&Extras(其它所有附加信息的集合)
  使用extras可以为组件提供扩展信息。
4.Intent解析过程
  在使用Intent时,根据是否明确的指定Intent对象的接收者,而分为两种情况。一种是显式的Intent,即在构造Intent对象时就指定其接收者;另一种是隐式的Intent,即在构造Intent对象时,并不指定其接收者。
  对于显式的Intent来说,Android不需要解析Intent,因为目标组件已经很明确。对于隐式的Intent来说,Android需要对其进行解析,通过解析,将Intent映射给可以处理该Intent的Activity、Service或Broadcast。&&&&&&&&
  Intent解析机制是通过查找注册在AndroidManifest.xml文件中的所有IntentFilter,以及IntentFilter所定义的Intent,找到最匹配的Intent。
  在解析过程中,Android通过判断Intent的Action、Type、Category这三个属性,从而找出最匹配的Intent,具体的判断方法如下:
  (1)如果Intent指明了Action,则目标组件IntentFilter的Action列表中就必须包含有这个Action,否则不能匹配;
  (2)如果Intent没有提供Type,系统将从Data中得到数据类型。目标组件的数据类型列表中必须包含Intent的数据类型,否则不能匹配。
  (3)如果Intent中的数据不是content:&URI,而且Intent也没有明确指定它的Type,将根据Intent中数据的scheme&(比如&http:&或者mailto:)&进行匹配。同理,Intent&的scheme必须出现在目标组件的scheme列表中,否则不能匹配。
  (4)如果Intent指定了一个或多个Category,这些类别必须全部出现在目标组件的类别列表中,否则不能匹配。
5.Intent使用实例
  下面介绍几个使用Intent的实例。
5.1调用其他的应用
  通过Intent可以调用并启动别的应用程序,比如调用拨打电话的程序,便可以使用如下的方法来完成:
2   * Function :
调用拨打电话的程序
3   * Author
博客园-依旧淡然
5   public void intentDemo_Call() {
Intent intent_call = new Intent();
//创建一个意图
intent_call.setAction(Intent.ACTION_CALL);
//设置意图为打电话
intent_call.setData(Uri.parse("tel:110"));
//设置电话号码
startActivity(intent_call);
//启动意图
  当然了,因为这里使用到了打电话的功能,我们还需要在AndroidManifest.xml文件中,添加申请打电话的资源权限,具体实现方法如下:
1   &!-- 打电话的权限 --&
&uses-permission       android:name="android.permission.CALL_PHONE"
  有关Android中的权限请求可以参阅《》。
5.2跳转到另一个Activity
  通过使用Intent不仅可以调用别的应用程序,还可以实现应用程序内部之间Activity的跳转。比如如下的代码便实现了从MainActivity跳转到SecondaryActivity,并向SecondaryActivity中传递了两个数据name和age。
* Function
跳转到SecondaryActivity
博客园-依旧淡然
public void intentDemo_GoToSecondaryActivity() {
Intent intent_toSecondary = new Intent();
//创建一个意图
intent_toSecondary.setClass(this, SecondaryActivity.class);
//指定跳转到SecondaryActivity
intent_toSecondary.putExtra("name", "jack");
//设置传递内容name
intent_toSecondary.putExtra("age", 23);
//设置传递内容age
startActivity(intent_toSecondary);
//启动意图
  那么,如何在SecondaryActivity中接收从MainActivity中传过来的内容(name、age)呢?下面的代码给出了一种实现方案。
* Function
接收mainActivity中的intent_toSecondary
博客园-依旧淡然
public void acceptIntent() {
Intent intent_accept = getIntent();
//创建一个接收意图
Bundle bundle = intent_accept.getExtras();
//创建Bundle对象,用于接收Intent数据
String name = bundle.getString("name");
//获取Intent的内容name
int age = bundle.getInt("age");
//获取Intent的内容age
5.3发送一个带回调方法的意图
  有时,我们可能需要通过定义在MainActivity中的某一控件来启动SecondaryActivity,并且当SecondaryActivity结束时,返给MainActivity一个执行结果。
  要实现上述的功能,只需要完成以下三步骤即可。
  (1)在MainActivity中实现向SecondaryActivity发送带请求码的意图,具体实现方法如下:
* Function
向SecondaryActivity发送带请求码的意图
博客园-依旧淡然
public void intentDemo_request() {
Intent intent_request = new Intent();
//创建一个意图
intent_request.setClass(this, SecondaryActivity.class);
//指定跳转到SecondaryActivity
startActivityForResult(intent_request, REQUEST_CODE);
//启动带请求码意图
  (2)在SecondaryActivity中接收intent_request,并向意图中填充要返给MainActivity的内容,最后还需要设置一个返回码。具体的实现方法如下:
* Function
接收mainActivity中的intent_request并返回一个结果码
博客园-依旧淡然
public void acceptIntentAndReturn() {
Intent intent = getIntent();
//创建一个接收意图
intent.putExtra("back", "data of SecondaryActivity");
//设置意图的内容
setResult(RESULT_CODE, intent);
//设置结果码
//结束SecondaryActivity,并返回MainActivity
  (3)当结束SecondaryActivity时,程序将返回到MainActivity界面。此时,MainActivity中的onActivityResult()方法将被回调,而我们要做的就是实现该方法。在本示例中,该方法的具体实现方法如下:
* Function
onActivityResult回调方法
博客园-依旧淡然
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUEST_CODE && resultCode == SecondaryActivity.RESULT_CODE) {
Bundle bundle = data.getExtras();
String str = bundle.getString("back");
Toast.makeText(this, "从SecondaryActivity的返回值为:" + str, Toast.LENGTH_LONG).show();
  以上的代码,我们通过判断requestCode和resultCode便可以唯一的确定MainActivity中的调用者和SecondaryActivity中的被调用者,建立起了一一对应的关系。并且,我们通过Bundle对象获取了从SecondaryActivity中返回给MainActivity的内容,并通过Toast进行了输出,如图2所示。
图2&从SecondaryActivity中返回的内容
  由图2可见,从SecondaryActivity中返回的内容正是我们在SecondaryActivity中定义的字符串&data&of&SecondaryActivity&。
  本篇博文主要介绍了Intent的相关概念,以及Intent在Activity中的三种使用方法。有关Intent在Service和Broadcast中的使用方法,将在后续的Service和Broadcast的学习过程中再做介绍。
阅读(...) 评论()10279人阅读
Android(49)
是在已知包名和类名的情况下常用的跳转方法:
Intent mIntent = new Intent();
mIntent.setClassName("com.android.settings","com.android.settings.Settings");
mContext.startActivity(mIntent);我们也常这么用:
Intent intent = new Intent(mContext, XXActivity.class);
startActivity(intent);这是跳转到当前应用的某个Activity,相信大家都十分熟悉,今天主要讲的是如何使用隐式intent意图跳转隐式跳转
1、隐式跳转之Action跳转
假定有一个Activity在清单中是这样的声明的:
&activity android:name=".ActionActivity";
&intent-filter
action android:name="customer_action_here"
&/intent-filter&
&/activity&
那么我们就可以使用以下代码进行跳转到上面这个Activity中:
//创建一个隐式的 Intent 对象:Action 动作
Intent intent = new Intent();
//设置 Intent 的动作为清单中指定的action
intent.setAction("customer_action_here");
startActivity(intent);
2、隐式跳转之Category跳转
假定有一个Activity在清单中是这样声明的:
&activity android:name=".CategoryActivity" &
&intent-filter&
&action android:name="customer_action_here" /&
&category android:name="customer_category_here" /&
&/intent-filter&
&/activity&我们可以使用如下代码进行跳转到以上Activity:
//创建一个隐式的 Intent 对象:Category 类别
Intent intent = new Intent();
intent.setAction("customer_action_here");
//添加与清单中相同的自定义category
intent.addCategory("customer_category_here");
startActivity(intent);3、隐式跳转之Data跳转
假定有一个Activity是这样定义的:
& activity android:name=".DataActivity"&
& intent-filter&
& category android:name="android.intent.category.DEFAULT" /&
android:scheme="content"
android:host="com.example.intentdemo"
android:port="8080"
android:pathPattern=".*pdf"
android:mimeType="text/plain"/&
& /intent-filter&
& /activity&我们可以使用如下代码进行跳转:
//创建一个隐式的 Intent 对象,方法四:Date 数据
Intent intent = new Intent();
Uri uri = Uri.parse("content://com.example.intentdemo:8080/abc.pdf");
//注:setData、setDataAndType、setType 这三种方法只能单独使用,不可共用
//单独以 setData 方法设置 URI
//intent.setData(uri);
//单独以 seType 方法设置 Type
//intent.setType("text/plain");
//上面分步骤设置是错误的,要么以 setDataAndType 方法设置 URI 及 mime type
intent.setDataAndType(uri, "text/plain");
startActivity(intent);
清单中的port及以下属性时可选的,没有必要一定添加,但是添加了port及以下属性的话,java代码中的Uri中要做相应的匹配。
4、隐式跳转之调用系统应用
4.1 使用浏览器浏览网页
//web浏览器
Uri uri= Uri.parse("http://www.baidu.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
4.2 调用地图
//打开地图查看经纬度
Uri uri = Uri.parse("geo:38..036476");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);4.3 调用电话拨号(不需要拨号权限)
Uri uri = Uri.parse("tel:10086");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);//注意区别于下面4.4的action
startActivity(intent);
4.4 调用电话直接拨号(需要拨号权限)
Uri uri = Uri.parse("tel:");
Intent intent = new Intent(Intent.ACTION_CALL, uri);//注意区别于上面4.3的aciton
startActivity(intent);4.5 调用短信程序(无需发送短信权限,接收者自填)
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.putExtra("sms_body", "这里写短信内容");
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);
4.6 调用短信程序(无需发送短信权限)
Uri uri = Uri.parse("smsto:10086");//指定接收者
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "你这个黑心运营商");
startActivity(intent);
4.7 调用邮件程序
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
intent.putExtra(Intent.EXTRA_SUBJECT, "这是标题");
intent.putExtra(Intent.EXTRA_TEXT, "这是内容");
startActivity(intent);4.8 调用音乐播放器
Intent intent = new Intent(Intent.ACTION_VIEW);
//Uri uri = Uri.parse("file:///sdcard/xiong_it.mp4");
Uri uri = Uri.parse("file:///sdcard/xiong_it.mp3");
intent.setDataAndType(uri, "audio/mp3");
startActivity(intent);4.9 调用视频播放器
Intent intent = new Intent(Intent.ACTION_VIEW);
//Uri uri = Uri.parse("file:///sdcard/xiong_it.mp3");
Uri uri = Uri.parse("file:///sdcard/xiong_it.mp4");
intent.setDataAndType(uri, "video/mp4");
startActivity(intent);
调用视频播放器和音乐播放器的区别在setDataAndType()时一个是audio类型,一个是video类型,很容易记住,不允许使用其他意思相近的单词代替,代替无效。4.10 调用搜索
Intent intent = new Intent();
intent.setAction(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, "android");
startActivity(intent);总结
相信大家经过上面的介绍,已经对Intent跳转有了一个比较成熟的理解,Intent是组件之间的纽带,使用它可以让系统替我们完成很多工作,不需要我们来指定完成工作的程序。实际上,我们会发现,调用系统程序使用液无非是隐式跳转,只不过使用的是系统内置的一些Action,Uri,Data等信息而已。希望对大家有所帮助。
转载请注明出处和链接:
这篇文章是的续篇,感兴趣的朋友可以查看。
阅读:131602
阅读:6782
阅读:8515when I am using my native app camera to take video, the output file have 3gp extension. I need to intent to camera with ACTION_VIDEO_CAPTURE intent action which will produce a file that has a mp4 file extension. how can I do it?
解决方案 You can go ahead and try dis code:
intent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
fileUri = getOutputMediaFile(MEDIA_TYPE_VIDEO);
// create a file to save the video in specific folder (this works for video only)
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // set the video image quality to high
// start the Video Capture Intent
startActivityForResult(intent, REQUEST_VIDEO_CAPTURED_NEXUS);
This will be called once the capture is completed
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case REQUEST_VIDEO_CAPTURED_NEXUS:
this.videoFromCamera(resultCode, data);
private void videoFromCamera(int resultCode, Intent data) {
if(fileUri != null) {
Log.d(TAG, "Video saved to:\n" + fileUri);
Log.d(TAG, "Video path:\n" + fileUri.getPath());
Log.d(TAG, "Video name:\n" + getName(fileUri));
// use uri.getLastPathSegment() if store in folder
//use the file Uri.
Get the output Media file uri with the following Method
public Uri getOutputMediaFile(int type)
// To be safe, you should check that the SDCard is mounted
if(Environment.getExternalStorageState() != null) {
// this works for Android 2.2 and above
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), "SMW_VIDEO");
// This location works best if you want the created images to be shared
// between applications and persist after your app has been uninstalled.
// Create the storage directory if it does not exist
if (! mediaStorageDir.exists()) {
if (! mediaStorageDir.mkdirs()) {
Log.d(TAG, "failed to create directory");
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaF
if(type == MEDIA_TYPE_VIDEO) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"VID_"+ timeStamp + ".mp4");
return Uri.fromFile(mediaFile);
This will save the captured video in pure MP4 format.
本文地址: &
当我用我的本机应用程序相机拍摄的视频,输出文件有3GP扩展。我需要意图的摄像头,这将产生具有MP4文件扩展名的文件ACTION_VIDEO_CAPTURE意图的行动。我该怎么办呢?解决方案 您可以继续尝试DIS code:
=意向意向书新(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
了fileURI = getOutputMediaFile(MEDIA_TYPE_VIDEO); //创建一个文件保存在特定的文件夹的视频(这个作品仅限视频)
intent.putExtra(MediaStore.EXTRA_OUTPUT,fileURI所);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1); //设置视频图像质量高
//启动视频捕获意图
startActivityForResult(意向,REQUEST_VIDEO_CAPTURED_NEXUS); 一旦捕获完成后这将被称为 保护无效的onActivityResult(INT申请code,INT结果code,意图数据){
如果(结果code == Activity.RESULT_OK){
开关(要求code){
案例REQUEST_VIDEO_CAPTURED_NEXUS:
this.videoFromCamera(结果code,数据);
打破;默认:
} 私人无效videoFromCamera(INT结果code,意图数据){ 如果(fileURI所!= NULL){
Log.d(TAG,“视频保存到:\\ n”+ fileURI所);
Log.d(TAG,“视频路径:\\ n”+ fileUri.getPath());
Log.d(TAG,“影片名称:\\ n”+的getName(fileURI所));//使用uri.getLastPathSegment()如果商店文件夹//使用文件URI。
}} 通过下面的方法输出媒体文件URI
公众开放的getOutputMediaFile(整型)
//为了安全起见,你应该检查SD卡安装
如果(Environment.getExternalStorageState()!= NULL){
//这个工程为Android 2.2及以上
文件mediaStorageDir =新的文件(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES),“SMW_VIDEO”);
//如果你想共享的创建的映像这个位置效果最佳
//应用程序之间以及您的应用程序已被卸载后仍然存在。
//创建存储目录,如果它不存在
如果(!mediaStorageDir.exists()){
如果(!mediaStorageDir.mkdirs()){
Log.d(TAG,“无法创建目录”);
//创建一个媒体文件名
字符串的timeStamp =新的SimpleDateFormat(“YYYYMMDD_HHMMSS”)格式(新的Date());
文件媒体文件;
如果(类型== MEDIA_TYPE_VIDEO){
媒体文件=新的文件(mediaStorageDir.getPath()+文件分割符+
“VID _”+的timeStamp +“.MP4”);
返回Uri.fromFile(媒体文件);
} 这将保存拍摄的视频在纯MP4格式。
本文地址: &
扫一扫关注官方微信Android Intent 意图作用
时间: 22:53:39
&&&& 阅读:181
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&Intent分为两大类:
(1)显性的(Explicit)
(2)隐性的(Implicit)
对于隐性意图,在某些时候, 应用程序只是想启动具有某种特征的组件, 并不想和某个特定的组件耦合. 使用Intent可以方便的达到这种高层次解耦的目的.(在模块间的组件启动)
intent定位事件的目的地:
(1)种类(category),比如我们常见的 LAUNCHER_CATEGORY 就是表示这是一类应用程序。
(2)类型(type),在前面的例子中没用过,表示数据的类型,这是隐性Intent定位目标的重要依据。
(3)组件(component),前面的例子中用的是setClass,不过也可以用setComponent来设置intent跳转的前后两个类实例。
(4)附加数据(extras),在ContentURI之外还可以附加一些信息,它是Bundle类型的对象。
对于显性Intent:
//ComponentName comp = new ComponentName(FirstActivity.this, SecondActivity.class);
1 // 明确的指定了待启动的组件类, 此时的Intent属于显式intent
2 Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
对于隐性Intent,分几步:
(1) 在清单文件中的application节点下的activity下添加intent-fileter,添加action:
&activity android:name=".SecondActivity"&
&intent-filter&
&action android:name="com.sample.student.query.number" /&
&category android:name="android.intent.category.DEFAULT" /&
&data android:scheme="studentNumber" /&
&/intent-filter&
&/activity&
android:name=".OtherActivity"&
&intent-filter &
&action android:name="com.sample.student.other"/&
&category android:name="android.intent.category.DEFAULT"/&
&data android:scheme="student" android:host="www.student.com" android:port="8080"/&
&data android:scheme="other"/&
&data android:mimeType="text/*" /&
&/intent-filter&
&/activity&
1 // action
2 private final String studentQueryIntent = "com.sample.student.query.number";
4 Uri studentNumberUri = Uri.parse("student:12");
5 Intent intent = new Intent();
6 intent.setAction(studentQueryIntent);
7 intent.setData(studentNumberUri);
8 startActivity(intent);
Intent intent = new Intent();
intent.setAction("com.sample.student.other");
Uri data = Uri.parse("student://www.student.com:8080");
//intent.setData(data);
intent.setDataAndType(data, "text/*");
startActivity(intent);
其中setData方法:
1 //注:setData、setDataAndType、setType 这三种方法只能单独使用,不可共用。
2 //要么单独以 setData 方法设置 URI
3 intent.setData(uri);
4 //如何在&data&中多了一个android:mimeType="text/*", 此时不能使用intent.setData, 而要使用intent.setDataAndType();
5 intent.setDataAndType(uri, "text/plain");
6 //要么单独以 setDataAndType 方法设置 Type
7 intent.setType("text/plain");
设置了多个data,只要匹配一个就可以启动这个activity。
如果设置了&&data android:scheme="student" android:host="www.student.com" android:path="/studentNum"&android:port="8080"/&,必须完全匹配&Uri data = Uri.parse("student://www.student.com:8080/studentNum");才能启动。
如果&&data android:scheme="student" android:host="www.student.com"/&,那么&Uri data = Uri.parse("student://www.student.com:80"),Uri data = Uri.parse("student://www.student.com:8800"),&Uri data = Uri.parse("student://www.student.com") 都可以匹配。
如果只设置了&&data android:scheme="student"/&,那么&Uri data = Uri.parse("test://") 就可以匹配,后面也可以加其他参数。
如果设置了mimeType,那么必须使用&intent.setDataAndType(data, "text/*"); 启动activity。
对于&intent-filter&中的action项可以有多个只要匹配其中一个就可以了。
隐性Intent:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:http://www.cnblogs.com/CharlesGrant/p/4876039.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!

我要回帖

更多关于 什么的意图 的文章

 

随机推荐