将文件从一个位置复制到另一个位置

时间:2011-04-22 13:16:20

标签: android progressdialog

我正在将文件从一个位置复制到SD卡中的另一个位置。 现在在复制开始时我使用进度对话框,但我怎么知道我的文件已被转移到关闭进度对话框。我无法关闭进度栏因为我不知道如何获取转移消息完成。 请帮帮我..

2 个答案:

答案 0 :(得分:1)

看看这篇最近的帖子和弗拉基米尔的答案,我认为服务可能有点过分(取决于你的具体情况)。 AsyncTask可能是要走的路。

Want to display AlertDialog in onCreate of Activity - android

答案 1 :(得分:0)

启动将文件复制到SD卡的服务。我推荐IntentService,因为它会自动为您创建一个单独的线程。文件完成复制后,请根据您的意图从您的服务中发送广播。然后回到您的活动类中,创建一个将处理广播的广播接收器。不要忘记在androidmanifest.xml文件中包含您的服务。这是一些代码:

此代码将在您的服务结束时发送

Intent i = new Intent();
i.setAction("com.me.custom.intent.filecopied.success");
sendBroadcast(i);

如果文件无法复制,请执行此操作

Intent i = new Intent();
i.setAction("com.me.custom.intent.filecopied.fail");
sendBroadcast(i);

然后回到您的主要活动课程中,您必须收到意图:

MyBroadcastReceiver intentReceiver = new MyBroadcastReceiver ();

    public class MyBroadcastReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context arg0, Intent arg1) {
            pdialog.dismiss();//dismiss your dialog
            if (arg1.getAction().toString().equals("com.me.custom.intent.filecopied.success")) {
                //Do whatever on file being copied successfully
            } else if (arg1.getAction().toString().equals("com.me.custom.intent.filecopied.fail"L)) {
                //Do whatever on file not being copied successfully
            }
        }

    }

同样在您的活动中,您必须注册/取消注册广播

@Override
protected void onPause() {
    // TODO Mark time user logged out
    unregisterReceiver(intentReceiver );
    super.onPause();
}

@Override
protected void onResume() {
    // TODO Add login check
    IntentFilter filter = new IntentFilter("com.me.custom.intent.filecopied.success");
    filter.addAction("com.me.custom.intent.filecopied.fail");
    registerReceiver(intentReceiver , filter);
    super.onResume();
}