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