我不能在服务中的异步任务中使用 getFilesDir()。我看到了这篇文章: Android:在 AsyncTask 中写入文件 它解决了活动中的问题,但我找不到在服务中执行此操作的方法。如何使用服务中的异步任务写入内部存储文件?这是我在异步任务中的代码:
File file = new File(getFilesDir() + "/IP.txt");
我不能在服务中的异步任务中使用 getFilesDir()。我看到了这篇文章: Android:在 AsyncTask 中写入文件 它解决了活动中的问题,但我找不到在服务中执行此操作的方法。如何使用服务中的异步任务写入内部存储文件?这是我在异步任务中的代码:
File file = new File(getFilesDir() + "/IP.txt");
Service
和都Activity
扩展自ContextWrapper
,所以它有getFilesDir()
方法。将 Service 的实例传递给AsyncTask
对象将解决它。
就像是:
File file = new File(myContextRef.getFilesDir() + "/IP.txt");
当您创建 AsyncTask 时,传递当前服务的引用(我想您正在创建AsyncTaskObject
from Service):
import java.io.File;
import android.app.Service;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.IBinder;
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
protected void useFileAsyncTask() {
FileWorkerAsyncTask task = new FileWorkerAsyncTask(this);
task.execute();
}
private static class FileWorkerAsyncTask extends AsyncTask<Void, Void, Void> {
private Service myContextRef;
public FileWorkerAsyncTask(Service myContextRef) {
this.myContextRef = myContextRef;
}
@Override
protected Void doInBackground(Void... params) {
File file = new File(myContextRef.getFilesDir() + "/IP.txt");
// use it ...
return null;
}
}
}
我认为当您启动服务时,您应该传递getFileDir()
如下提供的字符串路径。
Intent serviceIntent = new Intent(this,YourService.class);
serviceIntent.putExtra("fileDir", getFileDir());
在您的服务onStart
方法中,
Bundle extras = intent.getExtras();
if(extras == null)
Log.d("Service","null");
else
{
Log.d("Service","not null");
String fileDir = (String) extras.get("fileDir");
}