android判断clipdata否为uri,android.os.FileUriExposedException:file.jpg通过ClipData.Item.getUri()...-程序员宅基地

技术标签: android判断clipdata否为uri  

//for imports check on bottom of this code block

public class HomeProfileActivity extends AppCompatActivity {

//Button camera

public static final String TAG = HomeProfileActivity.class.getSimpleName();

public static final int REQUEST_TAKE_PHOTO = 0;

public static final int REQUEST_TAKE_VIDEO = 1;

public static final int REQUEST_PICK_PHOTO = 2;

public static final int REQUEST_PICK_VIDEO = 3;

public static final int MEDIA_TYPE_IMAGE = 4;

public static final int MEDIA_TYPE_VIDEO = 5;

private Uri mMediaUri;

private ImageView photobutton;

private Button buttonUploadImage, buttonTakeImage;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_home_profile);

ButterKnife.bind(this);

}

@OnClick(R.id.buttonTakeImage)

void takePhoto() {

mMediaUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

if (mMediaUri == null) {

Toast.makeText(this,

"There was a problem accessing your device's external storage.",

Toast.LENGTH_LONG).show();

}

else {

Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, mMediaUri);

startActivityForResult(takePhotoIntent, REQUEST_TAKE_PHOTO);

}

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (resultCode == RESULT_OK){

if (requestCode == REQUEST_TAKE_PHOTO) {

Intent intent = new Intent(this, ViewImageActivity.class);

intent.setData(mMediaUri);

startActivity(intent);

}

}

else if (resultCode != RESULT_CANCELED){

Toast.makeText(this, "Sorry, there was an error", Toast.LENGTH_SHORT).show();

}

}

private Uri getOutputMediaFileUri(int mediaType) {

// check for external storage

if (isExternalStorageAvailable()) {

// get the URI

// 1. Get the external storage directory

File mediaStorageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);

// 2. Create a unique file name

String fileName = "";

String fileType = "";

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());

if (mediaType == MEDIA_TYPE_IMAGE) {

fileName = "IMG_" + timeStamp;

fileType = ".jpg";

} else if (mediaType == MEDIA_TYPE_VIDEO) {

fileName = "VID_" + timeStamp;

fileType = ".mp4";

} else {

return null;

}

// 3. Create the file

File mediaFile;

try {

mediaFile = File.createTempFile(fileName, fileType, mediaStorageDir);

Log.i(TAG, "File: " + Uri.fromFile(mediaFile));

// 4. Return the file's URI

return Uri.fromFile(mediaFile);

}

catch (IOException e) {

Log.e(TAG, "Error creating file: " +

mediaStorageDir.getAbsolutePath() + fileName + fileType);

}

}

// something went wrong

return null;

}

private boolean isExternalStorageAvailable(){

String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)){

return true;

}

else {

return false;

}

}

import android.content.Intent;

import android.content.SharedPreferences;

import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;

import android.provider.MediaStore;

import android.support.annotation.NonNull;

import android.support.design.widget.BottomNavigationView;

import android.support.v7.app.AppCompatActivity;

import android.util.Log;

import android.view.MenuItem;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ImageView;

import android.widget.TextView;

import android.widget.Toast;

import java.io.File;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import butterknife.ButterKnife;

import butterknife.OnClick;

我也与方法startActivityForResult问题的onclick 和进口java.text.SimpleDateFormat;也跳异常运行时 我与buildtoolsversion SDK 25

2017-02-15

Omer

+3

'Uri.fromFile()'不适用于Android 7.0+,其targetSdkVersion为24或更高。使用'FileProvider'代替,正如我在[示例应用程序]中演示的那样(https://github.com/commonsguy/cw-omnibus/tree/master/Camera/FileProvider)。另请参阅[本博客文章](https://commonsware.com/blog/2016/03/14/psa-file-scheme-ban-n-developer-preview.html)和[本博客文章](https:/ /commonsware.com/blog/2016/08/31/granting-permissions-uri-intent-extra.html)。 –

+0

请参阅此问题中的答案:http://stackoverflow.com/questions/38200282/android-os-fileuriexposedexception-file-storage-emulated-0-test-txt-exposed –

+1

简单解释可在这里:[链接]( https://inthecheesefactory.com/blog/how-to-share-access-to-file-with-fileprovider-on-android-nougat/en) –

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42098104/article/details/117597091

智能推荐

python之moviepy库的安装与使用_python中如何安装moviepy.editor-程序员宅基地

文章浏览阅读8.8k次,点赞3次,收藏28次。目的:因为需要保存一个大大的.mp4视频,以防过程中设备出现异常导致整个长长的视频无法正常保存,所以采用分段保存视频的方式,每500帧保存一段,然后再将视频合到一起.最近刚开始学习python,发现python真的很好用,所以这次就使用python中的moviepy库来完成视频的合并.一.安装moviepy1. 你首先尝试使用 pip install moviepy指令是否可以正常安装moviepy库(我在python2.7上和python3.7上都尝试了这中安装方式都安装不了,所以不得不采用下面这_python中如何安装moviepy.editor

npm ERR! syscall spawn git-程序员宅基地

文章浏览阅读7k次,点赞2次,收藏3次。在进行npm install 时,有一个项目报下面的错误,其它项目没有报错,分析可能同git有关系,但是git又能正常使用。逐进到项目目录下面,直接使用git bash here这个窗口中,执行npm i,即可成功Lenovo@LAPTOP-DLK5GAMB MINGW64 /d/***/svnfile/dblzvue1$ npm inpm ERR! path gitnpm ERR! code ENOENTnpm ERR! errno ENOENTnpm ERR! syscall spawn _npm err! syscall spawn git

解决Tensorflow2.0出现:AttributeError: module 'tensorflow' has no attribute 'get_default_graph'的问题-程序员宅基地

文章浏览阅读7.4w次,点赞71次,收藏111次。问题描述在使用tensorflow2.0时,遇到了这个问题:AttributeError: module ‘tensorflow’ has no attribute ‘get_default_graph’这个报错的意思是:tensorflow模块没有get_default_graph属性错误原因这是由于Keras API(https://keras.io/)有多个实现,包括原始和参考实..._attributeerror: module 'tensorflow' has no attribute 'get_default_graph

go语言支付宝支付代码_alipay_qzwt#0#bdt_260950542402ed4216b90387565797c4-程序员宅基地

文章浏览阅读3.9k次。func (this*UserController)HandleUserPay() { var appId="2016091800541813" var aliPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzBr/2fOq6vbfAKiIlR8zyAOV2uOMbyYouV/ScQjuNNAVj+D6RZEd_alipay_qzwt#0#bdt_260950542402ed4216b90387565797c468b35aa6a5759f7ad0d57b

世界上最好的c++ rpc实现基于c++14标准_buttonrpc github-程序员宅基地

文章浏览阅读1.3w次,点赞2次,收藏22次。代码量很少,就两个hpp文件,新手学习好材料。server:#include "buttonrpc.hpp"int foo(int age, int mm){ return age + mm;}int main(){ buttonrpc server; server.as_server(5555); server.bind("foo", foo); server.run()..._buttonrpc github

LTspice raw文件解析工具PyLTSpice-程序员宅基地

文章浏览阅读2k次,点赞5次,收藏12次。  如果我们能解析LTspice仿真生成的波形数据文件,即raw文件,就可以做很多后处理工作了。比如导入Matlab;做数据统计,画直方图(Histogram)等等。  Python就提供了这么一个工具,PyLTSpice。另外在Github上也能下载:Gihub仓库地址。  或者更直接的,装完Python后直接在线安装这个包:(拿Python3.8举例)  装完以后,打开cmd窗口,输入pip install PyLTSpice,回车即可:  另外,如果需要画图,会用到matplotlib包_pyltspice

随便推点

用Python作流场计算时的后处理问题_流场后处理有什么比较难解决的数学问题-程序员宅基地

文章浏览阅读5k次,点赞2次,收藏15次。由于我现在正试图用Numpy来实现 Lattice Boltzmann me_流场后处理有什么比较难解决的数学问题

MES系统(springboot)_黑科mes-程序员宅基地

文章浏览阅读6.8k次,点赞4次,收藏13次。废话不多说,先亮网址:SMAW前台框架:bootstrap/ vue.js / Thymeleaf /swiper插件 等后台框架:springboot / mybatis / shiro等数据库:mysql----------------(上述内容版本号就不带了——懒)--------------------------------------------------------------------------------------------------------整个.._黑科mes

FaceNet论文翻译-程序员宅基地

文章浏览阅读1.6k次,点赞5次,收藏18次。《FaceNet: A Unified Embedding for Face Recognition and Clustering》Abstract尽管最近在人脸识别领域取得了重大进展[10,14,15,17],但是大规模有效地实施面部验证和识别对当前方法提出了严峻挑战。在本文中,我们提出了一个名为FaceNet的系统,它直接学习从面部图像到紧凑欧几里德空间的映射,其中距离直接对应于面部相似性..._facenet论文翻译

东芝mipi转LVDS芯片TC358775XBG调试-程序员宅基地

文章浏览阅读1.8w次,点赞3次,收藏14次。数据手册看,有2种控制方式,I2C或者MIPI直接控制,看了下,如果用I2C,mipi初始化时序还需要调整,太不方便,硬件上还要多占用一个I2C,这里直接用mipi控制接下来首先看时序:MSM8953平台,时序满足要求,在reset动作前添加个standby控制就可以了,还是比较简单的接下的mipi参数设置,模式选推荐的“sync_event”模式,参数用_tc358775

Linux Samba服务匿名配置只读共享及详细讲解_samba linux 和linux 只读-程序员宅基地

文章浏览阅读3.3k次。samba匿名共享1.修改samba服务配置:修改之前先备份配置文件:cp /etc/samba/smb.conf /etc/samba/smb.conf.default删除配置文件:rm -rf /etc/samba/smb.conf创建配置文件: vi /etc/samba/smb.conf​ (1). samba配置文件结构: 以 "节"为单..._samba linux 和linux 只读

关于springcloud中eureka报错com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException:_eureka exception starting filter [servletcontainer-程序员宅基地

文章浏览阅读486次。首先检查有没有导入eureka的启动器,eureka服务端导入的是一定是spring-cloud-starter-netflix-eureka-server,注意不要写成spring-cloud-starter-netflix-eureka-clienteureka: client: register-with-eureka: <dependency> <groupId>org.springframework.cloud</groupId>_eureka exception starting filter [servletcontainer] com.sun.jersey.api.conta

推荐文章

热门文章

相关标签