安卓实验使用绑定服务(bindService)的方式启动一个读写文件的本地服务,将界面输入的内容存储在文件(data.txt)中,并从文件中读取内容显示在界面中。 二、实验步骤 1.创建一个Activity,界面如图所示,初始状态下“保存文件”和“读取文件”两个按钮处于不可点击状态,点击“绑定服务”按钮后,启动用来读写文件的本地服务,“保存文件”和“读取文件”两个按钮恢复可点击状态,并在界面中输出简短提示信息“本地服务已经绑定”(使用toast实现)。 2.图中绿色区域是文本框控件,点击“保存文件”按钮,将文本框中输入的内容保存到文件中。并在界面中输出简短提示信息“保存文件成功”。 3.点击“读取文件”按钮,将文件中保存的内容显示在界面红色区域内。 4.点击“解绑服务”按钮,解绑当前服务,“保存文件”和“读取文件”两个按钮重置为不可点击状态,并在界面输出简短提示信息“本地服务已经解绑”。
时间: 2023-09-19 20:10:00 浏览: 55
抱歉,作为一个 AI,我没有办法在物理设备上运行实验,但是我可以给你提供一个代码示例,供你参考。
在这个示例中,我们创建了一个名为 FileService 的服务,该服务可以读写名为 data.txt 的文件。我们还创建了一个名为 MainActivity 的活动,在此活动中,我们绑定和解绑 FileService 服务,并使用 EditText、TextView 和 Button 控件来实现保存和读取文件的功能。
FileService.java:
```java
public class FileService extends Service {
private static final String TAG = "FileService";
private BufferedWriter mWriter;
private BufferedReader mReader;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new FileBinder();
}
@Override
public void onCreate() {
super.onCreate();
try {
File file = new File(getFilesDir(), "data.txt");
if (!file.exists()) {
file.createNewFile();
}
mWriter = new BufferedWriter(new FileWriter(file));
mReader = new BufferedReader(new FileReader(file));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onDestroy() {
super.onDestroy();
try {
mWriter.close();
mReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public boolean writeFile(String content) {
if (mWriter == null) {
return false;
}
try {
mWriter.write(content);
mWriter.flush();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
public String readFile() {
if (mReader == null) {
return null;
}
try {
StringBuilder sb = new StringBuilder();
String line;
while ((line = mReader.readLine()) != null) {
sb.append(line).append("\n");
}
return sb.toString();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public class FileBinder extends Binder {
public FileService getService() {
return FileService.this;
}
}
}
```
MainActivity.java:
```java
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private EditText mEditText;
private TextView mTextView;
private Button mBindButton;
private Button mSaveButton;
private Button mReadButton;
private Button mUnbindButton;
private FileService mFileService;
private boolean mIsBound;
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
FileService.FileBinder binder = (FileService.FileBinder) service;
mFileService = binder.getService();
mIsBound = true;
mSaveButton.setEnabled(true);
mReadButton.setEnabled(true);
Toast.makeText(MainActivity.this, "本地服务已经绑定", Toast.LENGTH_SHORT).show();
}
@Override
public void onServiceDisconnected(ComponentName name) {
mFileService = null;
mIsBound = false;
mSaveButton.setEnabled(false);
mReadButton.setEnabled(false);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEditText = findViewById(R.id.edit_text);
mTextView = findViewById(R.id.text_view);
mBindButton = findViewById(R.id.bind_button);
mSaveButton = findViewById(R.id.save_button);
mReadButton = findViewById(R.id.read_button);
mUnbindButton = findViewById(R.id.unbind_button);
mBindButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, FileService.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}
});
mSaveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String content = mEditText.getText().toString();
boolean result = mFileService.writeFile(content);
if (result) {
Toast.makeText(MainActivity.this, "保存文件成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "保存文件失败", Toast.LENGTH_SHORT).show();
}
}
});
mReadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String content = mFileService.readFile();
if (content != null) {
mTextView.setText(content);
} else {
Toast.makeText(MainActivity.this, "读取文件失败", Toast.LENGTH_SHORT).show();
}
}
});
mUnbindButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mIsBound) {
unbindService(mConnection);
mIsBound = false;
mSaveButton.setEnabled(false);
mReadButton.setEnabled(false);
Toast.makeText(MainActivity.this, "本地服务已经解绑", Toast.LENGTH_SHORT).show();
}
}
});
mSaveButton.setEnabled(false);
mReadButton.setEnabled(false);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mIsBound) {
unbindService(mConnection);
mIsBound = false;
}
}
}
```
在此示例中,我们使用了 bindService 方法来绑定 FileService 服务,并使用 unbindService 方法来解绑该服务。我们还使用了 Toast 控件来显示提示消息。我们还在 onDestroy 方法中解绑了服务,以确保我们在活动销毁时释放资源。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)