Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将文件另存为Sd卡上的Mp3{Android app}_Java_Android_Cordova - Fatal编程技术网

Java 将文件另存为Sd卡上的Mp3{Android app}

Java 将文件另存为Sd卡上的Mp3{Android app},java,android,cordova,Java,Android,Cordova,我正在尝试制作一个android应用程序,它只下载和保存扩展名为.mp3的文件。但它一直在SD卡上下载和保存文件,没有任何扩展名 我把代码贴在下面 @SuppressWarnings("deprecation") private LinearLayout.LayoutParams LP_FW = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); private

我正在尝试制作一个android应用程序,它只下载和保存扩展名为.mp3的文件。但它一直在SD卡上下载和保存文件,没有任何扩展名

我把代码贴在下面

@SuppressWarnings("deprecation")
private LinearLayout.LayoutParams LP_FW = new LinearLayout.LayoutParams(
        LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
private LinearLayout.LayoutParams LP_WW = new LinearLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

private String fileName;
private String path;
private boolean openFlag;

private static final int DOWNLOAD = 1;
private static final int DOWNLOAD_FINISH = 2;
private String mSavePath;
private int progress;
private boolean cancelUpdate ;

private Context mContext;
private ProgressBar mProgress;
private Dialog mDownloadDialog;
private TextView textView;
private final String[][] type_amp = {{ ".mp3", "audio/x-mpeg" } };

@Override
public boolean execute(String action, JSONArray args,
        CallbackContext callbackContext) throws JSONException {
    init(args.getString(0),args.getString(1),args.getBoolean(2));
    showDownloadDialog();
    return super.execute(action, args, callbackContext);
}

private void init(String path,String fileName,boolean openFlag){
    this.mContext = this.cordova.getActivity();
    this.path = path;
    this.fileName = fileName;
    this.openFlag = openFlag;
    this.cancelUpdate = false;
}


private void showDownloadDialog() {
    AlertDialog.Builder builder = new Builder(mContext);
    builder.setTitle("Downloading Music");
    LinearLayout layout = new LinearLayout(mContext);
    layout.setLayoutParams(LP_FW);
    layout.setGravity(Gravity.CENTER);
    layout.setOrientation(LinearLayout.VERTICAL);
    mProgress = new ProgressBar(mContext, null,
            android.R.attr.progressBarStyleHorizontal);
    mProgress.setLayoutParams(LP_FW);
    layout.addView(mProgress);
    textView = new TextView(mContext);
    textView.setLayoutParams(LP_WW);
    layout.addView(textView);
    builder.setView(layout);
    builder.setNegativeButton("Cancel",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                    cancelUpdate = true;
                }
            });
    mDownloadDialog = builder.create();
    mDownloadDialog.show();
    downloadFile();
}


@SuppressLint("DefaultLocale")
private String getOpenType(File file) {
    String type = "*/*";
    String fName = file.getName();
    int dotIndex = fName.lastIndexOf(".");
    if (dotIndex < 0) {
        return type;
    }
    String end = fName.substring(dotIndex, fName.length()).toLowerCase();
    if (end == "")
        return type;
    for (int i = 0; i < type_amp.length; i++) {
        if (end.equals(type_amp[i][0]))
            type = type_amp[i][1];
    }
    return type;
}


private void openFile() {
    File file  = new File(mSavePath,fileName);
    if (!file.exists()) {
        return;
    }
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setDataAndType(Uri.parse("file://" + file.toString()),
            getOpenType(file));
    try {
        mContext.startActivity(i);
    } catch (Exception e) {
        Toast.makeText(mContext, "无法打开" + file.getName(),
                Toast.LENGTH_SHORT).show();
    }

};

private Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
        case DOWNLOAD:
            mProgress.setProgress(progress);
            textView.setText(progress + "%");
            break;
        case DOWNLOAD_FINISH:
            if(openFlag){
                openFile();
            }
            break;
        default:
            break;
        }
    }

};


private void downloadFile() {
    new DownloadFileThread().start();

}
class DownloadFileThread extends Thread {
    @Override
    public void run() {
        try {
                URL url = new URL(path);
                HttpURLConnection conn = (HttpURLConnection) url
                        .openConnection();
                conn.connect();
                int length = conn.getContentLength();
                InputStream is = conn.getInputStream();

                FileOutputStream fos = getOutStream(fileName);
                int count = 0;
                byte buf[] = new byte[1024];
                do {
                    int numread = is.read(buf);
                    count += numread;
                    progress = (int) (((float) count / length) * 100);
                    mHandler.sendEmptyMessage(DOWNLOAD);
                    if (numread <= 0) {
                        mHandler.sendEmptyMessage(DOWNLOAD_FINISH);
                        break;
                    }
                    fos.write(buf, 0, numread);
                } while (!cancelUpdate);
                fos.close();
                is.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } 
        mDownloadDialog.dismiss();
    }

}

@SuppressWarnings("deprecation")
@SuppressLint("WorldReadableFiles")
private FileOutputStream getOutStream(String fileName) throws FileNotFoundException{
    if (Environment.getExternalStorageState().equals(
            Environment.MEDIA_MOUNTED)) {
        String sdpath = Environment.getExternalStorageDirectory()
                + "/";
        mSavePath = sdpath + "download";
        File file = new File(mSavePath);
        if (!file.exists()) {
            file.mkdir();
        }
        File saveFile = new File(mSavePath, fileName);
        return new FileOutputStream(saveFile);
    }else{
        mSavePath = mContext.getFilesDir().getPath();
        return mContext.openFileOutput(fileName , Context.MODE_WORLD_READABLE);
    }
}

 } 
@SuppressWarnings(“弃用”)
专用LinearLayout.LayoutParams LP_FW=新的LinearLayout.LayoutParams(
LayoutParams.FILL\u父级,LayoutParams.WRAP\u内容);
专用LinearLayout.LayoutParams LP_WW=新建LinearLayout.LayoutParams(
LayoutParams.WRAP_内容,LayoutParams.WRAP_内容);
私有字符串文件名;
私有字符串路径;
私有布尔开放标志;
私有静态最终int下载=1;
私有静态最终整数下载_FINISH=2;
私有字符串mSavePath;
私人投资进展;
私有布尔更新;
私有上下文;
私人进度律师程序;
私有对话框mDownloadDialog;
私有文本视图文本视图;
私有最终字符串[][]类型_amp={{.mp3”,“audio/x-mpeg”};
@凌驾
公共布尔执行(字符串操作、JSONArray参数、,
CallbackContext(CallbackContext)抛出JSONException{
init(args.getString(0)、args.getString(1)、args.getBoolean(2));
showDownloadDialog();
返回super.execute(操作、参数、回调上下文);
}
私有void init(字符串路径、字符串文件名、布尔openFlag){
this.mContext=this.cordova.getActivity();
this.path=path;
this.fileName=文件名;
this.openFlag=openFlag;
this.cancelUpdate=false;
}
私有void showDownloadDialog(){
AlertDialog.Builder=新生成器(mContext);
builder.setTitle(“下载音乐”);
LinearLayout布局=新的LinearLayout(mContext);
布局。setLayoutParams(LP_-FW);
布局。设置重力(重心);
布局。设置方向(线性布局。垂直);
mProgress=newprogressbar(mContext,null,
android.R.attr.progressBarStyleHorizontal);
M程序设置布局参数(LP_FW);
布局。添加视图(mProgress);
textView=新的textView(mContext);
setLayoutParams(LP_WW);
layout.addView(textView);
builder.setView(布局);
builder.setNegativeButton(“取消”,
新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
dialog.dismise();
cancelUpdate=true;
}
});
mDownloadDialog=builder.create();
mDownloadDialog.show();
下载文件();
}
@SuppressLint(“DefaultLocale”)
私有字符串getOpenType(文件){
字符串类型=“*/*”;
字符串fName=file.getName();
int dotIndex=fName.lastIndexOf(“.”);
如果(点索引<0){
返回类型;
}
String end=fName.substring(点索引,fName.length()).toLowerCase();
如果(结束==“”)
返回类型;
对于(int i=0;i如果(numread省去你正在做的所有事情的麻烦,使用一个库来做这件事

示例代码:

File output = new File("/path/to/sd/card/bam.mp3");
HttpRequest.get("http://example.org/file/bam.mp3").receive(output);
我可以看出,您已经知道如何获取SD卡路径,所以就这样做吧