使用绑定服务(bindService)的方式启动一个读写文件的本地服务,将界面输入的内容存储在文件(data.txt)中,并从文件中读取内容显示在界面中。 二、实验步骤 1.创建一个Activity,界面如图所示,初始状态下“保存文件”和“读取文件”两个按钮处于不可点击状态,点击“绑定服务”按钮后,启动用来读写文件的本地服务,“保存文件”和“读取文件”两个按钮恢复可点击状态,并在界面中输出简短提示信息“本地服务已经绑定”(使用toast实现)。 2.图中绿色区域是文本框控件,点击“保存文件”按钮,将文本框中输入的内容保存到文件中。并在界面中输出简短提示信息“保存文件成功”。 3.点击“读取文件”按钮,将文件中保存的内容显示在界面红色区域内。 4.点击“解绑服务”按钮,解绑当前服务,“保存文件”和“读取文件”两个按钮重置为不可点击状态,并在界面输出简短提示信息“本地服务已经解绑”。
时间: 2023-09-19 18:10:00 浏览: 88
(初步)bindService使用activity绑定方法来绑定指定的Service
1. 创建一个Activity,界面如下所示:
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.fileoperation.MainActivity">
<Button
android:id="@+id/btn_bind_service"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="绑定服务"
android:layout_centerHorizontal="true"/>
<EditText
android:id="@+id/et_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/btn_bind_service"
android:hint="请输入要保存的内容"
android:enabled="false"/>
<Button
android:id="@+id/btn_save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存文件"
android:enabled="false"
android:layout_below="@id/et_input"/>
<TextView
android:id="@+id/tv_output"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/btn_save"
android:layout_marginTop="20dp"
android:textColor="#FF0000"
android:textSize="18sp"
android:text="读取文件内容将会显示在这里"/>
<Button
android:id="@+id/btn_read"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="读取文件"
android:enabled="false"
android:layout_below="@id/tv_output"/>
<Button
android:id="@+id/btn_unbind_service"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="解绑服务"
android:enabled="false"
android:layout_below="@id/btn_read"/>
</RelativeLayout>
```
2. 创建一个用来读写文件的本地服务 FileService:
```java
public class FileService extends Service {
private static final String TAG = "FileService";
private FileOutputStream mFileOutputStream;
private FileInputStream mFileInputStream;
public FileService() {
}
@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();
}
mFileOutputStream = new FileOutputStream(file);
mFileInputStream = new FileInputStream(file);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onDestroy() {
super.onDestroy();
try {
mFileOutputStream.close();
mFileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void save(String content) {
try {
mFileOutputStream.write(content.getBytes());
mFileOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public String read() {
StringBuilder builder = new StringBuilder();
byte[] buffer = new byte[1024];
int len;
try {
while ((len = mFileInputStream.read(buffer)) != -1) {
builder.append(new String(buffer, 0, len));
}
} catch (IOException e) {
e.printStackTrace();
}
return builder.toString();
}
public class FileBinder extends Binder {
public FileService getService() {
return FileService.this;
}
}
}
```
3. 在MainActivity中绑定服务,实现保存文件和读取文件的功能:
```java
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "MainActivity";
private EditText mEtInput;
private TextView mTvOutput;
private Button mBtnBindService;
private Button mBtnSave;
private Button mBtnRead;
private Button mBtnUnbindService;
private FileService.FileBinder mFileBinder;
private ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
mFileBinder = (FileService.FileBinder) iBinder;
Toast.makeText(MainActivity.this, "本地服务已经绑定", Toast.LENGTH_SHORT).show();
mBtnSave.setEnabled(true);
mBtnRead.setEnabled(true);
mBtnUnbindService.setEnabled(true);
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
mFileBinder = null;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEtInput = (EditText) findViewById(R.id.et_input);
mTvOutput = (TextView) findViewById(R.id.tv_output);
mBtnBindService = (Button) findViewById(R.id.btn_bind_service);
mBtnSave = (Button) findViewById(R.id.btn_save);
mBtnRead = (Button) findViewById(R.id.btn_read);
mBtnUnbindService = (Button) findViewById(R.id.btn_unbind_service);
mBtnBindService.setOnClickListener(this);
mBtnSave.setOnClickListener(this);
mBtnRead.setOnClickListener(this);
mBtnUnbindService.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_bind_service:
Intent intent = new Intent(this, FileService.class);
bindService(intent, mServiceConnection, BIND_AUTO_CREATE);
break;
case R.id.btn_save:
String content = mEtInput.getText().toString();
if (!TextUtils.isEmpty(content)) {
mFileBinder.getService().save(content);
Toast.makeText(this, "保存文件成功", Toast.LENGTH_SHORT).show();
}
break;
case R.id.btn_read:
String result = mFileBinder.getService().read();
mTvOutput.setText(result);
break;
case R.id.btn_unbind_service:
unbindService(mServiceConnection);
mBtnSave.setEnabled(false);
mBtnRead.setEnabled(false);
mBtnUnbindService.setEnabled(false);
Toast.makeText(this, "本地服务已经解绑", Toast.LENGTH_SHORT).show();
break;
}
}
}
```
阅读全文