Intent隐式意图的跳转及FileProvider的使用

在一些App应用上我们时常可以看到打开照相机,打开摄像机,包括直接拔打电话给指定的对象,而这些涉及到我们系统自带的应用的操作时,基本都是使用Intent隐式意图来进行跳转,下面就来给大家仔细说一下比较常见的几种隐式意图的跳转。
首先是打开照相机:

//跳转到照相机的隐式意图
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
activity.startActivityForResult(intent,101);//第二个参数是一个标识符,用来在返回时判断

还有跳转到摄像机的

Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_VIDEO_CAPTURE);
activity.startActivityForResult(intent,102);//第二个参数是一个标识符,用来在返回时判断

跳转到系统浏览器的

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));//浏览器打开的网址
startActivity(intent);

拨打电话的

//直接拨打所填的电话号
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+"电话号"));//格式不能错
startActivity(intent);

再打开照相机时,我们会发现,可以拍照,但是无法将拍下来的照片进行一个存储,所以android为了解决这个问题,给出了一个FileProvider的解决方法
首先,在清单文件内配置以下属性

<provider
    android:authorities="com.haah"//内容随意填
    android:name="android.support.v4.content.FileProvider"//写死,不可更改
    android:exported="false"//false可以使其他应用无法访问,true则相反
    android:grantUriPermissions="true">//设置权限
    <meta-data android:name="android.support.FILE_PROVIDER_PATHS"//写死,不可更改
        android:resource="@xml/paths"></meta-data>//在res文件下自定义xml文件,新建文件添加存储地址
</provider>

在清单文件内配置好后,我们就可以在java代码中通过代码进行一个存储功能了

Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//隐式跳转

Calendar calendar = Calendar.getInstance();//获取当前的事件
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
String string = "IMG_"+year+month+day+"_"+hour+minute+second+".png";//设置照片的名字
//通过FileProvider来进行文件存储
//第二个属性要和清单文件的authorities值一致
uri = FileProvider.getUriForFile(this"", new File("/sdcard/相机/" + string));//地址要和xml文件内的地址要一致,不然会报错
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);//添加uri
startActivityForResult(intent,101);

这样,我们就可以将照相机拍的照存储到内存中了
感谢观看

你可能感兴趣的:(Intent隐式意图的跳转及FileProvider的使用)