潔吉問題不能寫入外置SD卡,如何在運行KITKAT的設備上使用新的Lollipop SD卡訪問API?
正如Goolge Document提到要簡化運行奇巧設備代碼或更早的版本,你可以使用FROMFILE(文件),它模仿DocumentsProvider的行爲 以下代碼(新API)適用於棒棒糖,但如何使用kitkat的新API?
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 42);
}
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
if (resultCode == RESULT_OK) {
Uri treeUri = resultData.getData();
DocumentFile pickedDir = DocumentFile.fromFile(new File("/mnt/extSdCard/Test"));
// List all existing files inside picked directory
for (DocumentFile file : pickedDir.listFiles()) {
Log.d("Tag", "Found file " + file.getName() + " with size " + file.length());
}
// Create a new file and write into it
DocumentFile newFile = pickedDir.createFile("text/plain", "My Novel");
OutputStream out = null;
try {
out = getContentResolver().openOutputStream(newFile.getUri());
out.write("A long time ago...".getBytes());
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.my, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
如何使用FROMFILE(文件)?
我試過,但說未能CREATEFILE:java.io.IOException的:打開失敗:EACCES(拒絕)
添加權限 即使在使用許可權的android:NAME =「android.permission .WRITE_EXTERNAL_STORAGE」
Android版本4.4.2
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
DocumentFile pickedDir = DocumentFile.fromFile(new File("/mnt/extSdCard/Test"));
// List all existing files inside picked directory
for (DocumentFile file : pickedDir.listFiles()) {
Log.d("Tag", "Found file " + file.getName() + " with size " + file.length());
}
// Create a new file and write into it
DocumentFile newFile = pickedDir.createFile("text/plain", "My Novel");
OutputStream out = null;
try {
//Says NullPointerException
out = getContentResolver().openOutputStream(newFile.getUri()); out.write("A long time ago...".getBytes());
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
我居然有此權限,但由於某些原因,調用DocumentFile.fromFile(背景下,文件).delete ();對我來說總會失敗。 – 2015-09-05 22:48:26
據我所知,「不給你任何額外的訪問」仍然成立。如果您已經獲得完整存儲的URI訪問權限,並且希望獲得File - > DocumentFile,則必須根據您有權訪問的樹URI進行一些痛苦的URI構建,然後從中創建DocumentFile。查看DocumentFile源代碼,並查看FilePicker/Helper方法返回的URI中的差異等。 – darken 2015-09-05 23:37:53
這是爲什麼?這個功能不是因爲這個而被認爲是無用的嗎?你的意思是告訴我,我需要遍歷文件樹? – 2015-09-06 05:13:57