有人知道Android上的ProcessKiller进程吗?看来它杀死了我的应用程序,因为它有一个打开的文件。当我将文件下载到 SD 卡,然后在下载过程中拔出卡时,就会发生这种情况。这就是 logcat 所说的。
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
E/ProcessKiller( 2447): Process com.example.myapp (24090) has open file /storage/sda1/MyRecordings/81321226.recording/downloading/00000149.ts
Run Code Online (Sandbox Code Playgroud)
我无法正确关闭该文件,因为它是我下载的临时文件,当用户在下载过程中拔出 SD 卡时会发生这种情况。所以我无法再访问该文件,因此无法关闭 …
对于Android,以下代码返回一个Uri,可用于创建与目录对应的DocumentFile。
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, REQUEST_CODE_CUSTOM_FOLDER);
Run Code Online (Sandbox Code Playgroud)
由于库的许多方法都需要一个参数为 java.io.File,我想知道是否可以从 DocumentFile 中获取 java.io.File。
例如,返回的文档树 Uri treeUri 如下:
treeUri.getPath():/tree/primary:DCIM/deeper/evendeeper
treeUri.toString(): content://com.android.externalstorage.documents/tree/primary%3ADCIM%2Fdeeper%2Fevendeeper
Run Code Online (Sandbox Code Playgroud)
我需要编写一个 Android 应用程序来观察另一个应用程序何时修改文件,然后从中读取数据。该文件由用户选择。所以我想使用 Intent 以及设备上可用的文件选择器供用户选择文件。
使用 Intent.ACTION_OPEN_DOCUMENT 执行此操作会返回 URI。我可以打开一个 InputStream 并将文件读入 File 实例,然后检查上次修改日期。然而,每 5 秒左右将文件内容复制到 File 实例中只是为了检查它是否已被修改,这在资源方面似乎是浪费。显然,我不能使用 File 实例和从流中复制一次的数据来继续检查上次修改时间,我必须每次都继续复制它。
有没有办法使用 URI 获取最后修改时间?或者使用 Intent 获取实际文件/绝对路径?我发现了一些非常复杂的方法来从 URI 获取绝对路径,但它们看起来太复杂了,而且我还没有找到任何我愿意使用的方法,并且没有信心它可以在不同版本的 Android 上工作。
还有其他解决方案吗?
我可以选择在应用程序中附加文件.我这需要向用户显示特定项目类型的预览或图标.扩展名为.txt,.doc,.pdf,.jpeg,.mp4的图标需要有自己的特定图标,或者如果可能的话,还需要一个好的预览缩略图图标.当用户想要查看它时,他会点击图标或预览.我需要启动一个查看文件的意图.
我的意思是pdf应该在pdf阅读器中打开,或者txt或doc应该在文本阅读器中打开,mp3或mp4应该在音频或视频播放器中打开..而且我希望他们回到我的重要部分应用程序,当他们退出视图应用程序时.
在我的脑海中唯一的想法是搜索文件名并手动拆分扩展并进行字符串比较以检查它与常量字符串值,如".mp3"或".mp4"等.这不是一个好主意因为图像,音频和视频类型有很多扩展.如果有任何直接的方法,请告诉我.谢谢您的帮助.
我正在尝试使用FileOutputStream和写一个文件,OutputStreamWriter但我一直收到只读警告.
这是我正在使用的代码
FileOutputStream fw = new FileOutputStream((trackName.replaceAll(" ", ""))+".gpx", true);
OutputStreamWriter osw = new OutputStreamWriter(fw);
osw.write(XML_HEADER+"\n");
osw.write(TAG_GPX+"\n");
writeTrackPoints(trackName, osw, locations, time, trackDescp);
writeWayPoints(osw, locations,time);
osw.flush();
osw.close();
Run Code Online (Sandbox Code Playgroud)
而Logcat输出
java.io.FileNotFoundException: /test.gpx (Read-only file system)
at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method)
at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152)
at java.io.FileOutputStream.<init>(FileOutputStream.java:97)
at java.io.FileOutputStream.<init>(FileOutputStream.java:168)
at java.io.FileOutputStream.<init>(FileOutputStream.java:147)
at com.fyp.run_race.GPXFileWriter.<init>(GPXFileWriter.java:25)
at com.fyp.run_race.GPSTrackDetails$1.onClick(GPSTrackDetails.java:58)
at android.view.View.performClick(View.java:2408)
at android.view.View$PerformClick.run(View.java:8816)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
我确定问题是什么.
我正在尝试将位图保存到Pictures目录中.这是代码
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File file = new File(path, "test1.PNG");
try {
path.mkdirs();
OutputStream out = new FileOutputStream(file);
mBitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
Log.w("ExternalStorage", "Error writing " + file, e);
}
Run Code Online (Sandbox Code Playgroud)
但执行陷入困境OutputStream out = new FileOutputStream(file);
我使用调试器并且完整路径返回mnt/sdcard/Pictures/test1.PNG,是mnt/我无法过去的罪魁祸首OutputStream out = new FileOutputStream(file);?因为我只能sdcard/在我的文件目录中看到.
谢谢!
是否可以在运行应用程序时在assets文件夹中创建文件,并在应用程序停止时删除相同的文件.
我有以下每3秒运行一次的操作。
基本上,它从服务器下载文件,然后每3秒将其保存到本地文件中。
以下代码可以完成一段时间。
public class DownloadTask extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... params) {
downloadCommandFile( eventUrl);
return null;
}
}
private void downloadCommandFile(String dlUrl){
int count;
try {
URL url = new URL( dlUrl );
NetUtils.trustAllHosts();
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.connect();
int fileSize = con.getContentLength();
Log.d(TAG, "Download file size = " + fileSize );
InputStream is = url.openStream();
String dir = Environment.getExternalStorageDirectory() + Utils.DL_DIRECTORY;
File file = new File( dir );
if( !file.exists() ){
file.mkdir(); …Run Code Online (Sandbox Code Playgroud) 我有一种方法从url下载图像并将其保存在内部存储的文件夹中
public void saveDynamicImage(String url,String fileName, String folderName) {
InputStream iStream;
BufferedInputStream buffInputStream;
ByteArrayBuffer byteArray = null;
try {
HttpGet httpGet = new HttpGet(url);
HttpClient httpClient = new DefaultHttpClient();
HttpResponse httpResponse = httpClient.execute(httpGet);
iStream = httpResponse.getEntity().getContent();
buffInputStream = new BufferedInputStream(iStream, 8 * 1024);
byteArray = new ByteArrayBuffer(50);
int current = 0;
while ((current = buffInputStream.read()) != -1) {
byteArray.append((byte) current);
}
} catch (ClientProtocolException e1) {
} catch (IOException e1) {
}
File dynamicImageDir = context.getDir(AppConstants.DYNAMIC_IMAGE, Context.MODE_PRIVATE);
File appNamefileDir = …Run Code Online (Sandbox Code Playgroud) 我正在尝试生成HTML文件,以便以后在特定的Android平板电脑(Android 5.1.1)上进行打印。如果HTML文件包含阿拉伯字母,则HTML查看器将崩溃。
生成HTML后,我进行了打印作业以进行打印,然后打开android打印适配器并尝试呈现阿拉伯HTML,该应用程序在此处崩溃,并显示上述错误。
请帮忙..
我的代码
WebSettings webSetting = webview.getSettings();
webSetting.setJavaScriptEnabled(true);
webview.getSettings().setBuiltInZoomControls(true);
webview.getSettings().setDisplayZoomControls(false);
htmlWebView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
webview.getSettings().setLoadWithOverviewMode(true);
webview.getSettings().setUseWideViewPort(true);
webView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
Toast.makeText(getActivity(), "finished" , Toast.LENGTH_LONG).show();
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
Toast.makeText(getActivity(), "Error: " + error , Toast.LENGTH_LONG).show();
}
});
webView.loadUrl("file:///" + Environment.getExternalStorageDirectory() + "/reports/genFiles/" + filename);
Run Code Online (Sandbox Code Playgroud) android ×10
android-file ×10
documentfile ×1
file ×1
file-io ×1
html ×1
io ×1
printing ×1
uri ×1