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文件,但它不保存.如果有人发现问题,请帮我纠正.
据我所知,在Android上,有:
我如何获得每个的总数和可用性,并检查它们是否存在(某些手机没有内部SD卡)
谢谢
我想在SD卡上创建一个sqlite数据库(不想用尽用户的内部存储).我熟悉OpenHelper模式:
public DatabaseFoo(Context context) {
OpenHelper openHelper = new OpenHelper(context);
mDb = openHelper.getWritableDatabase();
}
private static class OpenHelper extends SQLiteOpenHelper {
public OpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
...
Run Code Online (Sandbox Code Playgroud)
所以,如果我们想在SD卡上创建,我认为我们必须使用:
public static SQLiteDatabase openOrCreateDatabase (String path,
SQLiteDatabase.CursorFactory factory);
Run Code Online (Sandbox Code Playgroud)
但是什么是"工厂"的说法,应该使用什么工厂?
还有点担心如果用户在我的应用程序正在使用时删除SD卡会发生什么.
谢谢
我需要从用户选择的SD卡中删除图像.在我的活动中,在用户从图库中选择图像后,我执行以下代码:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Utils.imgUri = data.getData();
Utils.imgPath = getPath(Utils.imgUri);
File file = new File(Utils.imgPath);
boolean deleted = file.delete();
}
}
}
Run Code Online (Sandbox Code Playgroud)
其中getPath方法是:
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
if(cursor!=null){
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
else return null;
}
Run Code Online (Sandbox Code Playgroud)
图像被正确删除,但在图库中仍然保留已删除图像的预览.当我点击它时,加载了一个黑色图像..
那么,在从我的应用代码中删除一些图像后,如何更新图库预览?
我有一个下载大量内容的应用程序(它在用户之间有所不同,但可能是200mb到1GB或更多).
目前,我将所有这些内容保存在外部存储上,因为这可能是空间最大的区域,例如SD卡.这在大多数情况下都可以正常工作,但是这种情况不一定是理想的.
如果设备具有内置的外部存储设备(如大多数平板电脑),但也有SD卡插槽,则外部存储问题会变得有点复杂.该应用程序可以安装到SD卡上,但内容将保存在内置存储中,而不是外部SD卡中.
如果应用程序安装在SD卡上,是否会getFilesDir()在SD卡或内部存储器上给出路径?
处理这个问题的最佳方法是什么?我应该将内容保存到内部存储(在SD卡上),外部存储器还是在启动应用程序时询问用户最好的想法?
我正在开发一个Android应用程序,我必须检测Android SD卡中音频文件的变化,文件名,文件路径和执行的操作.例如,如果我在SD卡中添加文件,那么我想知道
以前我已经尝试过文件观察器但是为此我必须在每个目录上应用它.所以我搜索了一些其他解决方案,并获得了有关Audio.Media.EXTERNAL_CONTENT_URI的信息.然后我创建了一个像这样的内容观察者
UriObserver.java - 一个内容观察者
class UriObserver extends ContentObserver {
public UriObserver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
@Override
public void onChange(boolean selfChange) {
// TODO Auto-generated method stub
super.onChange(selfChange);
Log.d("INSTANT", "GETTING CHANGES");
}
}
Run Code Online (Sandbox Code Playgroud)
这是注册的代码
UriObserver observer = new UriObserver(new Handler());
Log.d("INSTANT", "registered content observer");
this.getApplicationContext()
.getContentResolver()
.registerContentObserver(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, false,
observer);
Log.d("INSTANT", "registered content observer");
Run Code Online (Sandbox Code Playgroud)
它让我知道在与音频文件相关的SD卡中发生了一些变化.但它没有提供有关添加,编辑或删除哪个文件的任何信息.
然后我搜索了解决方案并得到了这篇文章
Android:如何通过MTP连接时检测MediaStore中的更改
在这篇文章中,Bhiefer给出了一些代码作为答案,我认为它可以起作用,所以我试图实现它,但我无法这样做.
我能为此做些什么?
我可以查询Audio.Media.EXTERNAL_CONTENT_URI的最新更改吗?这段代码:
mCursor = context.getContentResolver().query(
Audio.Media.EXTERNAL_CONTENT_URI, …Run Code Online (Sandbox Code Playgroud) android android-sdcard android-mediascanner contentobserver fileobserver
根据文件,
"Each FileObserver instance monitors a single file or directory. If a directory is monitored,
events will be triggered for all files and subdirectories inside the monitored directory."
Run Code Online (Sandbox Code Playgroud)
我的代码就像,
FileObserver fobsv = new FileObserver("/mnt/sdcard/") {
@Override
public void onEvent(int event, String path) {
System.out.println(event+" "+path);
}
};
fobsv.startWatching();
Run Code Online (Sandbox Code Playgroud)
但是,onEvent()只有在/ mnt/sdcard /中更改文件时才会触发.如果我在/ mnt/sdcard/downloads /中创建一个文件,则该方法不会被触发.
代码有问题吗?
我使用Media Recorder API创建了一个基本的录音应用程序.我正在尝试在SD卡中创建一个文件夹,并将我录制的文件保存到该文件夹中.我收到以下代码的警告.
File.mkdir()被忽略
// Assign random number to avoid audio file from overwriting
Long tsLong = System.currentTimeMillis()/1000;
// Specify a Location for the recorded file to be stored in the SD card
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/AudioRecordTest/";
File path = new File(mFileName);
if(!path.exists()) {
path.mkdir();
}
mFileName += "/AudioRecordTest_" + tsLong.toString() + ".mp3";
Run Code Online (Sandbox Code Playgroud)
如何解决此警告消息.如果有任何其他错误,请随意修改代码.
我正在使用三星A3,Android 5.0.2.我正在使用此设置来编译应用程序,即Android 4.1 Jelly Bean(API 16)目标.
我确切地知道了外部可移动microSD卡的路径/mnt/extSdCard/(参见下面的注释#7).
问题:我注意到了
File myDir = new File("/mnt/extSdCard/test");
myDir.mkdirs();
Run Code Online (Sandbox Code Playgroud)
不起作用:没有创建目录.
也:
File file = new File("/mnt/extSdCard/books/test.txt"); // the folder "books" already exists on the external microSD card, has been created from computer with USB connection
FileOutputStream fos = new FileOutputStream(file);
Run Code Online (Sandbox Code Playgroud)
产生此错误:
java.io.FileNotFoundException:/mnt/extSdCard/books/test.txt:open failed:libcore.io.IoBridge.open中的EACCES(权限被拒绝)(...
如何强制读取+写入外部可移动microSD卡?
笔记:
Environment.getExternalStorageDirectory().toString()给出了/storage/emulated/0我的手机内部存储,即不是我想要的.
getExternalFilesDir(null)给出/storage/emulated/0/Android/data/com.blahblah.appname/files/即不是我想要的东西.请注意,我不能getExternalFilesDirs在决赛中使用,s因为这在API16中不可用.此外,API16中也没有运行时权限.
我已经拥有了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />,而且READ_EXTERNAL_STORAGE.
我读了很多喜欢的话题这一个或这一个,其实大概20类似的问题,但最后似乎很复杂,一切都和它的相反之说.那是我的我正在寻找特定于这种情况的解决方案.
我不想ACTION_OPEN_DOCUMENT …
我在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
谢谢!
android ×10
android-sdcard ×10
fileobserver ×2
java ×2
sd-card ×2
environment ×1
permissions ×1
save ×1
sqlite ×1