《移动终端软件开发技术》第五周作业:后台服务

/ 0评 / 0

第五部分课后作业:

  1. 编程建立一个简单的进程内服务,实现比较两个整数大小功能。服务提供Int Compare(Int, Int)函数,输入两个整数,输出较大的整数。
  2. 提交记录文档与源码

这个实验是考察service的使用,这里参考课件中的例子,用绑定的方法,直接使用service中的函数。

先布局,两个输入框让用户填数字。一个按钮,调用服务作比较,最下方显示比较结果。

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:rowCount="4"
    android:columnCount="4"
    android:orientation="horizontal">

    <TextView
        android:layout_columnSpan="4"
        android:layout_gravity="fill"
        android:text="请在下面输入两个数:"/>

    <EditText
        android:layout_columnSpan="2"
        android:layout_gravity="center"
        android:id="@+id/num1"/>

    <EditText
        android:layout_columnSpan="2"
        android:layout_gravity="center"
        android:id="@+id/num2"/>

    <Button
        android:text="比较"
        android:id="@+id/btn"
        android:layout_columnSpan="4"
        android:layout_gravity="fill"/>

    <TextView
        android:text="较大的数是:"
        android:layout_columnSpan="4"
        android:layout_gravity="fill"
        android:id="@+id/result"/>

</GridLayout>

参考课件中的例子,不是很搞的清楚绑定,但至少改改例子的代码运行成功了。

大概就是绑定获得一个服务的对象compareService,然后就可以直接调用其compare函数。

最后将比较结果设置成文本显示框的text。

MainActivity.java

package bupt.hkt2017211874.lab05;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
    private CompareService compareService;

    private ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            compareService = ((CompareService.LocalBinder)service).getService();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            compareService = null;
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn=(Button)findViewById(R.id.btn);
        final EditText text1=(EditText) findViewById(R.id.num1);
        final EditText text2=(EditText) findViewById(R.id.num2);
        final TextView resultView=(TextView)findViewById(R.id.result);

        Intent intent=new Intent(MainActivity.this,CompareService.class);

        bindService(intent,mConnection, Context.BIND_AUTO_CREATE);


        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                int num1=Integer.valueOf(text1.getText().toString()).intValue();
                int num2=Integer.valueOf(text2.getText().toString()).intValue();

                int result=compareService.compare(num1,num2);

                resultView.setText("较大的数为:"+result);
            }
        });
    }

}

这里直接套用了例子中提示服务绑定成功的代码。

主要代码其实就是compare函数,比较的功能通过改函数实现。

CompareService.java

package bupt.hkt2017211874.lab05;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.widget.Toast;

import androidx.annotation.Nullable;

public class CompareService extends Service {
    private final IBinder mBinder = new LocalBinder();

    public class LocalBinder extends Binder {
        CompareService getService() {
            return CompareService.this;
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        Toast.makeText(this, "本地绑定:CompareService",
                Toast.LENGTH_SHORT).show();
        return mBinder;
    }

    @Override
    public boolean onUnbind(Intent intent){
        Toast.makeText(this, "取消本地绑定:CompareService",
                Toast.LENGTH_SHORT).show();
        return false;
    }

    public int compare(int num1,int num2){
        if(num1>num2)
            return num1;
        else
            return num2;
    }
}

需要注册service组件

<service android:name=".CompareService"/>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="bupt.hkt2017211874.lab05">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service android:name=".CompareService"/>
    </application>

</manifest>

运行结果:

由于时间问题,未作错误处理,如果用户未在输入框输入内容,直接判断,程序会直接退出。

发表评论

电子邮件地址不会被公开。 必填项已用*标注