我想从SD卡路径创建视频的缩略图.我怎样才能做到这一点?
如何检查SD卡是否已满,以便您的应用程序可以决定是否可以继续执行其工作,即写入外部存储器或通知用户存储空间不足.
这让我疯了!这是我的代码(我知道这个文件存在):
File imageFile = new File("/sdcard/gallery_photo_4.jpg");
ImageView jpgView = (ImageView)findViewById(R.id.imageView);
BitmapDrawable d = new BitmapDrawable(getResources(), imageFile.getAbsolutePath());
jpgView.setImageDrawable(d);
Run Code Online (Sandbox Code Playgroud)
错误发生在最后一行(第28行,如下所示).
错误输出:
W/dalvikvm( 865): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
E/AndroidRuntime( 865): FATAL EXCEPTION: main
E/AndroidRuntime( 865): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.example.camera/org.example.camera.Imgview}: java.lang.NullPointerException
E/AndroidRuntime( 865): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
E/AndroidRuntime( 865): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime( 865): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime( 865): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime( 865): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 865): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 865): at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime( 865): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 865): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( …Run Code Online (Sandbox Code Playgroud) Android设备上外部SDCard的文件路径始终是"/ storage/extSdCard"吗?如果没有,有多少变化?
我需要它来为我的应用程序测试外部 SD卡的可用性.
我正在使用Titanium,它有一个方法Titanium.Filesystem.isExternalStoragePresent() 但它总是返回true,即使没有安装外部SDCard.
我认为它在本地存储中检测到SDCard因此返回true.但我真正想要的是检测物理SD卡是否已安装.
我可以通过单独检测文件"/ storage/extSdCard"的存在来做到这一点吗?
谢谢.
我想获取连接到Android设备的所有存储设备的列表.
例如 - 内部存储(存储所有文件夹,如下载,DCIM等),SD卡和OTG设备.
我知道有很多StackOverflow帖子讨论了这个主题,但没有一个可以满足我的目的,如上所述.
我可以通过调用Environment.getExternalStorageDirectory().getPath()返回内部存储的路径来获取内部存储.
对此的任何帮助都将非常感激,因为没有标准的AFAIK可以使用它来检索所有连接的存储设备的列表.
此外,许多解决方案不适用于不同的设备和Android版本.
在我的应用程序的第一次运行,我正在下载一个非常大的文件到/ sdcard /
我已经知道如果用户手机的内部SD卡已满或未安装(例如,如果手机作为大容量存储设备连接到PC,或者未正确断开与PC的连接),则可能会失败.
但是有没有没有内部SD卡的Android设备?(我的应用肯定无法使用)
通过我的Android程序,我写了一个这样的文件:
String file = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Files/hello.txt";
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(str+"\n"); \\yeah string has a value there
writer.close();
Run Code Online (Sandbox Code Playgroud)
现在,当我进入Android的"Astro"文件浏览器时,我可以看到文件hello.txt,/mnt/sdcard/Files但是当我在Windows中安装sdcard时,我只能看到该文件夹中有4个其他文件而不是hello.txt.
在Windows本身,我甚至试图取消选中隐藏隐藏文件选项,以确保文件不被隐藏,但它只是不可见.
我甚至试图在SD卡的根目录中写入文件,但同样的问题.现在我很惊讶我怎么可能在Android中看到该文件而在Windows中却看不到.在Android中我甚至检查了文件内容,一切看起来都很好.
可能是什么问题呢?我写错文件的方式是什么?
PS:是的,android.permission.WRITE_EXTERNAL_STORAGE添加了Manifest权限.
我通过我的Android程序写了一个文件,如下所示:
String file = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Files/hello.txt";
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(str + "\n"); \\ Yeah, 'str' has a value there
writer.close();
Run Code Online (Sandbox Code Playgroud)
该程序完成其工作并完成.现在我点击Android上的后退按钮关闭应用程序.现在发生的事情是,如果我去Android文件浏览器(如Astro)我可以看到该文件,但如果我在Windows上安装SD卡,我看不到该文件!
现在,如果我去,__CODE__我甚至可以在Windows中看到该文件.
我应该怎么做才能在Windows中看到一个文件,如果该文件是由我的Android应用程序在SD卡上写的,我不想每次都去设置并强制关闭.
实际上文件写得正确(我认为),但由于Android'后退'按钮的默认行为不会杀死应用程序,看起来除非应用程序被杀,否则我无法在Android之外打开文件(在Android中) ,我仍然能够看到它,甚至打开它).
那么,对于这种情况,什么是最好的解决方案.我应该在关闭时自动终止该应用吗?人们说严格不建议使用System.exit().
stopWriting = (Button) findViewById(R.id.save);
stopWriting.setOnClickListener(new OnClickListener() {
@SuppressLint("SdCardPath")
public void onClick(View v) {
// stop recording the sensor data
try {
myFile = new File("/sdcard/SensorData/" + txtData.getText() + ".txt");
myFile.createNewFile();
sData = new FileOutputStream(myFile);
myOutWriter = new OutputStreamWriter(sData);
myBufferedWriter = new BufferedWriter(myOutWriter);
myPrintWriter = new PrintWriter(myBufferedWriter);
//if(myFile != null )//stopFlag = mSensorManager.cancelTriggerSensor(null, null);
Toast.makeText(getBaseContext(), "Done", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
Run Code Online (Sandbox Code Playgroud)
我试图将陀螺仪数据保存到txt文件,但它不保存.如果有人发现问题,请帮我纠正.
我正在使用Exoplayer演示应用程序,并希望从SD卡预加载MP4视频.我已经尝试过这篇文章的实现,但它不起作用.在我的exoplayer Demo中没有名为DemoUtil.java的类.改为使用:
public static final Sample[] LOCAL_VIDEOS = new Sample[] {
new Sample("Some User friendly name of video 1",
"/mnt/sdcard/video1.mp4", Util.TYPE_OTHER),
};
Run Code Online (Sandbox Code Playgroud)
我也无法使用他们为SampleChooserActivity.java提到的代码片段.(保持给我错误)
我改为使用:
group = new SampleGroup("Local Videos");
group.addAll(Samples.LOCAL_VIDEOS);
sampleGroups.add(group);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?每个设备的文件路径是否都会更改?