我正在尝试使用 AlarmManager 在广播接收器中进行自动 FTP 传输,它在我的 HTC 上运行良好,但在我朋友的 Galaxy S3 上崩溃了。这似乎是一个 ICS 问题,因为当我模拟它时,LogCat 中有一个“主线程上的网络”异常。
看来我将不得不使用 AsyncTask。是否可以在广播接收器中实现 AsyncTask?我在网上找不到任何关于它的信息。有人知道吗?
以下是 FTP 下载方法的相关部分:
public void getFTP(Context context)
{
//
// Download config.txt file from server
//
FTPClient ftpClient = new FTPClient();
try{
ftpClient.connect(InetAddress.getByName(ipAddress));
ftpClient.enterLocalPassiveMode();
ftpClient.login(user, pass);
ftpClient.setFileType(FTP.ASCII_FILE_TYPE);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("/sdcard/config.txt"),8*1024);
boolean status=ftpClient.retrieveFile("config.txt", bos);
if(status){
//Toast toast = Toast.makeText(context, "Downloaded config.txt!", Toast.LENGTH_SHORT);
//toast.show();
}
else {
Toast toast = Toast.makeText(context, "Cannot download config.txt!", Toast.LENGTH_SHORT);
toast.show();
return;
}
bos.flush();
bos.close();
ftpClient.logout();
ftpClient.disconnect();
}
catch (IOException e){
Toast.makeText(context,"Connection error!" , Toast.LENGTH_LONG).show();
return;
}
它是使用 onReceive() 方法调用的
getFTP(context);