ASyncTask - 我想通过按钮从互联网上下载文件

时间:2015-12-30 17:38:51

标签: java android android-intent download android-asynctask

我对整个编码工作还不熟悉,但我希望对ASyncTask提供一些帮助,以及如何通过通知或仅通过SD卡将其从互联网直接下载到我的手机。< / p>

我在activity_main.xml布局中已经有一个按钮:

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/UpdateButton"
    android:text="@string/Update"
    android:background="#6c0005"
    android:textColor="#ffffff"
    android:textSize="12dp" />

在我的MainActivity.Java类中,我现在只需要一个连接到字符串的按钮,并意图将其重定向到webview以下载它:

case R.id.UpdateButton:
    Intent browserIntent = new Intent(Intent.ACTION_VIEW,
    Uri.parse(getString(R.string.UpdateAV)));
    startActivity(browserIntent);
    break;

但不是这样,我希望将文件直接下载到手机或进度条,说它正在下载到外部存储器或SD卡。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

这只是一个如何下载文件的示例,如果您想使用AsyncTask,则必须在Android中为此编写等效代码,您将在doInBacground()中执行相同的工作{1}}方法。

public class DownloadTest {

public static void main(String[] args) {

    Thread thread = new Thread(){
        @Override
        public void run() {
            // TODO Auto-generated method stub
            super.run();
            try {
                dowanloadFile(new URL("some url"), new File("some file"));
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };
    thread.start();


   }

private static void dowanloadFile(URL url, File file){
    try {
        FileUtils.copyURLToFile(url, file );
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

此代码使用commons-io-2.4.jar库,

你可以获得更多代码Example

你可以像这样在SD卡上下载

final String path = Environment.getExternalStorageDirectory().getAbsolutePath();

AsycnTask就像这样

private class MtDownloadTask extends AsyncTask<Void, Void ,Void>{

    URL someUrl = new URL("your url String"); //
    File someFile = new File("your file, where you want to save the data");

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {
        return null;
        FileUtils.copyURLToFile(url, file);
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
    }

}

确保您的应用具有互联网权限,为此,请将此行添加到AndroidManifest.xml

    <uses-permission android:name="android.permission.INTERNET"/>