从我的内部存储读取文件 android phone 6.0.0
Read files from my internal storage android phone 6.0.0
我的应用程序从服务器下载 mp3 文件并放入我的内部存储 (/storage/emulated/0) 的下载文件夹中。现在我面临的问题是我无法读取文件并将它们显示在 recyclerview 中。这几天我一直在尝试访问该文件夹,但没有成功。
我的MainActivity.java文件
public class MainActivity extends AppCompatActivity {
private static final String URL = "http://myurl.com/mylanguage/a_displays.php";
private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private List<Radio> radioList;
ProgressDialog progressDialog;
long queueid;
DownloadManager dm;
private MediaPlayer mediaplayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
radioList = new ArrayList<>();
mediaplayer = new MediaPlayer();
adapter = new RadioAdapter(radioList,this);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
DownloadManager.Query req_query = new DownloadManager.Query();
req_query.setFilterById(queueid);
Cursor c = dm.query(req_query);
if (c.moveToFirst()) {
int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {
String uriString= c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
String path = Environment.DIRECTORY_DOWNLOADS;
String path1 = getFilesDir()
+ File.separator + path + File.separator;
Log.d("PathFile", path1);
File dir = Environment.getExternalStorageDirectory();
String pather = dir.getAbsolutePath();
Log.d("Pather", String.valueOf(pather));
final File folder = Environment.getExternalStorageDirectory() ;
Log.d("asd", String.valueOf(folder));
listFilesForFolder(folder);
adapter.notifyDataSetChanged();
}
}
}
}
};
registerReceiver(receiver,new IntentFilter((DownloadManager.ACTION_DOWNLOAD_COMPLETE)));
String codeValue = getIntent().getStringExtra("CODEINTENT");
datadummy(codeValue);
recyclerView.setAdapter(adapter);
}
public void listFilesForFolder(final File folder) {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
listFilesForFolder(fileEntry);
} else {
System.out.println(fileEntry.getName());
}
}
}
public void datadummy(final String codeVal) {
StringRequest stringRequest = new StringRequest(Request.Method.POST,URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response){
try {
JSONArray array = new JSONArray(response);
for (int i = 0; i < array.length(); i++) {
Log.d("MusicName", String.valueOf(array.getJSONObject(i).getString("audio_sound")));
final String music_uri = "http://myurl.com/mylanguage/" + array.getJSONObject(i).getString("audio_sound");
Uri uri = Uri.parse(music_uri);
dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(uri);
String.valueOf(request.setDestinationInExternalFilesDir(MainActivity.this,
Environment.DIRECTORY_DOWNLOADS,
String.valueOf(array.getJSONObject(i).getString("audio_sound"))));
queueid = dm.enqueue(request);
}
Log.d("-response",response);
}catch (JSONException e){
e.printStackTrace();
Log.d("Main", "JsonException: " + e);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
params.put("album_code", codeVal);
return params;
}
};
RequestQueue requestqueue = Volley.newRequestQueue(this);
requestqueue.add(stringRequest);
}
}
几乎所有的方法我都试过了。然后我需要播放那些 mp3 文件。我正在做一个现场项目,我很挣扎。
您可以使用此代码上传文件:
public void goforIt(){
FTPClient con = null;
try
{
con = new FTPClient();
con.connect("192.168.2.57");
if (con.login("Administrator", "KUjWbk"))
{
con.enterLocalPassiveMode(); // important!
con.setFileType(FTP.BINARY_FILE_TYPE);
String data = "/sdcard/vivekm4a.m4a";
FileInputStream in = new FileInputStream(new File(data));
boolean result = con.storeFile("/vivekm4a.m4a", in);
in.close();
if (result) Log.v("upload result", "succeeded");
con.logout();
con.disconnect();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
下载你可以使用这个:
public void goforIt(){
FTPClient con = null;
try
{
con = new FTPClient();
con.connect("192.168.2.57");
if (con.login("Administrator", "KUjWbk"))
{
con.enterLocalPassiveMode(); // important!
con.setFileType(FTP.BINARY_FILE_TYPE);
String data = "/sdcard/vivekm4a.m4a";
OutputStream out = new FileOutputStream(new File(data));
boolean result = con.retrieveFile("vivekm4a.m4a", out);
out.close();
if (result) Log.v("download result", "succeeded");
con.logout();
con.disconnect();
}
}
catch (Exception e)
{
Log.v("download result","failed");
e.printStackTrace();
}
}
嗯,我自己找到了解决办法!
我们可以使用 getExternalFilesDir(DIRECTORY_DOWNLOADS).
获取内部存储路径 (Android)
例如:File folder = new File(getExternalFilesDir(DIRECTORY_DOWNLOADS)+ "/uploads/" );
如需进一步参考,请参阅此 link,它真的很有帮助
http://grishma102.blogspot.com/2014/01/android-storage-system-to-access-path.html
谢谢!
我的应用程序从服务器下载 mp3 文件并放入我的内部存储 (/storage/emulated/0) 的下载文件夹中。现在我面临的问题是我无法读取文件并将它们显示在 recyclerview 中。这几天我一直在尝试访问该文件夹,但没有成功。
我的MainActivity.java文件
public class MainActivity extends AppCompatActivity {
private static final String URL = "http://myurl.com/mylanguage/a_displays.php";
private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private List<Radio> radioList;
ProgressDialog progressDialog;
long queueid;
DownloadManager dm;
private MediaPlayer mediaplayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
radioList = new ArrayList<>();
mediaplayer = new MediaPlayer();
adapter = new RadioAdapter(radioList,this);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
DownloadManager.Query req_query = new DownloadManager.Query();
req_query.setFilterById(queueid);
Cursor c = dm.query(req_query);
if (c.moveToFirst()) {
int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {
String uriString= c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
String path = Environment.DIRECTORY_DOWNLOADS;
String path1 = getFilesDir()
+ File.separator + path + File.separator;
Log.d("PathFile", path1);
File dir = Environment.getExternalStorageDirectory();
String pather = dir.getAbsolutePath();
Log.d("Pather", String.valueOf(pather));
final File folder = Environment.getExternalStorageDirectory() ;
Log.d("asd", String.valueOf(folder));
listFilesForFolder(folder);
adapter.notifyDataSetChanged();
}
}
}
}
};
registerReceiver(receiver,new IntentFilter((DownloadManager.ACTION_DOWNLOAD_COMPLETE)));
String codeValue = getIntent().getStringExtra("CODEINTENT");
datadummy(codeValue);
recyclerView.setAdapter(adapter);
}
public void listFilesForFolder(final File folder) {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
listFilesForFolder(fileEntry);
} else {
System.out.println(fileEntry.getName());
}
}
}
public void datadummy(final String codeVal) {
StringRequest stringRequest = new StringRequest(Request.Method.POST,URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response){
try {
JSONArray array = new JSONArray(response);
for (int i = 0; i < array.length(); i++) {
Log.d("MusicName", String.valueOf(array.getJSONObject(i).getString("audio_sound")));
final String music_uri = "http://myurl.com/mylanguage/" + array.getJSONObject(i).getString("audio_sound");
Uri uri = Uri.parse(music_uri);
dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(uri);
String.valueOf(request.setDestinationInExternalFilesDir(MainActivity.this,
Environment.DIRECTORY_DOWNLOADS,
String.valueOf(array.getJSONObject(i).getString("audio_sound"))));
queueid = dm.enqueue(request);
}
Log.d("-response",response);
}catch (JSONException e){
e.printStackTrace();
Log.d("Main", "JsonException: " + e);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
params.put("album_code", codeVal);
return params;
}
};
RequestQueue requestqueue = Volley.newRequestQueue(this);
requestqueue.add(stringRequest);
}
}
几乎所有的方法我都试过了。然后我需要播放那些 mp3 文件。我正在做一个现场项目,我很挣扎。
您可以使用此代码上传文件:
public void goforIt(){
FTPClient con = null;
try
{
con = new FTPClient();
con.connect("192.168.2.57");
if (con.login("Administrator", "KUjWbk"))
{
con.enterLocalPassiveMode(); // important!
con.setFileType(FTP.BINARY_FILE_TYPE);
String data = "/sdcard/vivekm4a.m4a";
FileInputStream in = new FileInputStream(new File(data));
boolean result = con.storeFile("/vivekm4a.m4a", in);
in.close();
if (result) Log.v("upload result", "succeeded");
con.logout();
con.disconnect();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
下载你可以使用这个:
public void goforIt(){
FTPClient con = null;
try
{
con = new FTPClient();
con.connect("192.168.2.57");
if (con.login("Administrator", "KUjWbk"))
{
con.enterLocalPassiveMode(); // important!
con.setFileType(FTP.BINARY_FILE_TYPE);
String data = "/sdcard/vivekm4a.m4a";
OutputStream out = new FileOutputStream(new File(data));
boolean result = con.retrieveFile("vivekm4a.m4a", out);
out.close();
if (result) Log.v("download result", "succeeded");
con.logout();
con.disconnect();
}
}
catch (Exception e)
{
Log.v("download result","failed");
e.printStackTrace();
}
}
嗯,我自己找到了解决办法! 我们可以使用 getExternalFilesDir(DIRECTORY_DOWNLOADS).
获取内部存储路径 (Android)例如:File folder = new File(getExternalFilesDir(DIRECTORY_DOWNLOADS)+ "/uploads/" );
如需进一步参考,请参阅此 link,它真的很有帮助 http://grishma102.blogspot.com/2014/01/android-storage-system-to-access-path.html
谢谢!