我想让我的应用程序自动安装apk.这适用于api <24.但对于24岁,它失败了.Android实现了额外的安全性:
对于定位到Android 7.0的应用,Android框架会强制执行StrictMode API策略,该策略禁止在应用外部公开file:// URI.如果包含文件URI的intent离开了您的应用程序,则该应用程序将失败并出现FileUriExposedException异常.
所以我尝试了这个:
Uri myuri;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N){
myuri = Uri.parse("file://"+outapk);
} else {
File o = new File(outapk);
myuri = FileProvider.getUriForFile(con, con.getApplicationContext().getPackageName() + ".provider", o);
}
Intent promptInstall = new Intent(Intent.ACTION_VIEW).setDataAndType(myuri,"application/vnd.android.package-archive");
con.startActivity(promptInstall);
Run Code Online (Sandbox Code Playgroud)
但得到一个致命的例外:
com.android.packageinstaller "Caused by: java.lang.SecurityException: Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord{b42ee8a 6826:com.android.packageinstaller/u0a15} (pid=6826, uid=10015) that is not exported from uid 10066".
Run Code Online (Sandbox Code Playgroud)
我的清单中有export = true.
问题似乎是packageinstaller无法使用content:// uri.
有没有办法允许应用程序以编程方式安装带有api24的apk?
uri securityexception apk packageinstaller android-7.0-nougat
我在AndroidManifest.xml中添加了这一行:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
但是,当我运行代码写入SD卡时,我收到此错误:
02-19 13:24:46.760: E/CameraTest(598): /mnt/sdcard/image.jpg: open failed: EACCES (Permission denied)
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
编辑:我正在使用添加了SDCard的Android模拟器.
编辑2:我知道现在的问题是:我已经调用了函数Environment.getExternalStorageState(),我被"删除"了.任何人都知道如何解决这个问题并建立状态MEDIA_MOUNTED
谢谢!
我需要将一些数据保存到SD卡,我已经将权限添加到AndroidManifest.xml文件中,当我在Android 4.12 mobile中测试它时,我可以得到正确的结果.
但是当我在Android 5.1移动设备中测试它时,我打开失败:EACCES(Permission denied)错误,为什么?
顺便说一句,我已经阅读了Android 6.0开放失败:EACCES(Permission denied)和Exception'开放失败:EACCES(Permission denied)'在Android上,但现在我的手机是SamSung Android 5.1
码
private void ActionUploadFiles(Map<String, String> files,IHTTPSession session,String uploadFolder){
try{
Set<String> keys = files.keySet();
for (String key:keys) {
String location = files.get(key);
File source = new File(location);
String filename= session.getParms().get(key);
filename=FilenameUtils.getName(filename);
File target = new File(uploadFolder,filename);
FileUtils.copyFile(source,target);
}
}
catch (Exception e) {
Utility.LogError("Upload Error: "+ e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="info.dodata.wifi">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" …Run Code Online (Sandbox Code Playgroud) 正如标题所指出的那样,我在将文件写入外部存储器时遇到了麻烦.我的调试设备是Nexus 5.问题是,我能够从设备中完美地读取文件(我一直在尝试使用下载文件夹中的文件),但无法编写它们.我知道我必须在设备未连接到计算机时执行此操作.但它也不起作用.
事实上,我已经尝试在写入之前阅读SD卡的状态(当然,这不起作用).当设备连接到我的PC时,状态显示为"已安装".我比较了状态Environment.MEDIA_MOUNTED_READ_ONLY,Environment.MEDIA_MOUNTED没有任何成功.我的设备不属于这些状态.
你必须知道的一件事是我的手机没有外部SD卡,因为它是一个内部SD卡.这导致我的设备具有用于外部存储的"/ storage/emulated/0/..."目录.
我还必须指出,我在Android Manifest中实现了以下标记:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
我对可能发生的事情没有任何线索.另一件可能有用的事情是我尝试使用winrar管理文件(适用于Android),并且我已经能够使用连接到我的PC的设备删除文件,并且无需连接.所以我不知道该怎么办.
我用来编写文件的代码如下.请记住,它应该读取一个图像文件(它做),将其转换为字符串,将其转换回图像,然后将其保存到下载文件夹:
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + "/base_image.jpg");
// Reading a Image file from file system
FileInputStream imageInFile = new FileInputStream(file);
byte imageData[] = new byte[(int) file.length()];
imageInFile.read(imageData);
// Converting Image byte array into Base64 String
String imageDataString = encodeImage(imageData);
// Converting a Base64 String into Image byte array
byte[] imageByteArray = decodeImage(imageDataString);
File newFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "converted_image.jpg");
//Write a image byte array …Run Code Online (Sandbox Code Playgroud) 我有一个关于BitMapFactory.decodeFile的问题.
在我的应用程序中,我希望用户能够从他/她的设备中选择图像或拍照.然后必须在ImageView中显示
这是代码片段:
Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
MyImage image = new MyImage();
image.setTitle("Test");
image.setDescription("test choose a photo from gallery and add it to " + "list view");
image.setDatetime(System.currentTimeMillis());
image.setPath(picturePath);
Run Code Online (Sandbox Code Playgroud)
我得到了这个例外:
BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20170302-WA0012.jpg: open failed: EACCES (Permission denied)
Run Code Online (Sandbox Code Playgroud)
怎么解决它.请帮帮我.谢谢你...
我无法将文件写入外部 SD 卡。我收到错误消息 EAcess denied。我在互联网上搜索了很多,发现从 Android 4.4 + android 的存储访问框架 (SAF) 写入文件是必需的。
但我正在使用一些能够在 SD 卡上写入(创建/删除/重命名)文件的 android 应用程序。他们没有使用 SAF。
因此,请帮助我了解如何在不使用 SAF 框架的情况下执行此操作。
谢谢