当前位置: 代码迷 >> Android >> Android 自启动 靠山运行 发送短信
  详细解决方案

Android 自启动 靠山运行 发送短信

热度:57   发布时间:2016-05-01 15:44:04.0
Android 自启动 后台运行 发送短信
android本地后台服务示例

在android编写Service入门中介绍了android的两种后台服务,本地和远程的。这里用本地服务做了一个模拟定时后台发短信的技术原型。

启动该示例应用的样子:





选择启动:



启动后,可看到ddms logcat日志:



这是操作:启动、停止和退出应用,显示的调试日志信息。模拟后台服务每5秒钟发送一次短信信息。

主要代码,后台服务SmsService:
    package com.easymorse;    import android.app.Service;    import android.content.Intent;    import android.os.Binder;    import android.os.IBinder;    import android.util.Log;    public class SmsService extends Service {        private boolean started;        private boolean threadDisable;        private ServiceBinder serviceBinder = new ServiceBinder();        public class ServiceBinder extends Binder implements ISmsService {            @Override            public boolean isStarted() {                return started;            }            @Override            public void start() {                started=true;                Log.d(“sms.service”, “sms service started.”);            }            @Override            public void stop() {                started=false;                Log.d(“sms.service”, “sms service stopped.”);            }        }        @Override        public IBinder onBind(Intent intent) {            return serviceBinder;        }        @Override        public void onCreate() {            super.onCreate();            Thread thread = new Thread() {                @Override                public void run() {                    while (!threadDisable) {                        try {                            if (started) {                                Log.d(“sms.service”, “send a sms message.”);                            }                            Thread.sleep(1000 * 5);                        } catch (InterruptedException e) {                        }                    }                }            };            thread.start();            Log.d(“sms.service”, “sms service created.”);        }        @Override        public void onDestroy() {            super.onDestroy();            threadDisable = true;            Log.d(“sms.service”, “sms service shutdown.”);        }    }    


前台的Actvity代码,SmsServiceOptions:
    package com.easymorse;    import android.app.TabActivity;    import android.content.ComponentName;    import android.content.Intent;    import android.content.ServiceConnection;    import android.os.Bundle;    import android.os.IBinder;    import android.util.Log;    import android.widget.RadioGroup;    import android.widget.TabHost;    import android.widget.RadioGroup.OnCheckedChangeListener;    public class SmsServiceOptions extends TabActivity {        private RadioGroup radioGroup;        private ISmsService smsService;        private ServiceConnection serviceConnection = new ServiceConnection() {            @Override            public void onServiceConnected(ComponentName name, IBinder service) {                smsService = (ISmsService) service;                if (smsService.isStarted()) {                    radioGroup.check(R.id.radioButtonStart);                } else {                    radioGroup.check(R.id.radioButtonStop);                }                radioGroup                        .setOnCheckedChangeListener(new OnCheckedChangeListener() {                            @Override                            public void onCheckedChanged(RadioGroup group,                                    int checkedId) {                                if (checkedId == R.id.radioButtonStart) {                                    Log.d(“sms.service”, “starting service…”);                                    smsService.start();                                } else {                                    Log.d(“sms.service”, “stopping service…”);                                    smsService.stop();                                }                            }                        });            }            @Override            public void onServiceDisconnected(ComponentName name) {                smsService = null;            }        };        /** Called when the activity is first created. */        @Override        public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.main);            this.setTitle(“短信服务器”);            this.bindService(new Intent(“com.easymorse.SmsService”),                    this.serviceConnection, BIND_AUTO_CREATE);            TabHost tabHost = this.getTabHost();            tabHost.setup();            TabHost.TabSpec spec = tabHost.newTabSpec(“服务选项”);            spec.setContent(R.id.Option01);            spec.setIndicator(“服务选项”);            tabHost.addTab(spec);            spec = tabHost.newTabSpec(“服务状态”);            spec.setContent(R.id.Option02);            spec.setIndicator(“服务状态”);            tabHost.addTab(spec);            radioGroup = (RadioGroup) this.findViewById(R.id.radioGroup01);        }        @Override        protected void onDestroy() {            super.onDestroy();            this.unbindService(serviceConnection);        }    }  
   

另外,不要忘记在配置文件中增加对service的声明,见AndroidManafest.xml:
    <?xml version=”1.0″ encoding=”utf-8″?>    <manifest xmlns:android=”http://schemas.android.com/apk/res/android”        package=”com.easymorse” android:versionCode=”1″ android:versionName=”1.0″>        <application android:[email protected]/icon” android:[email protected]/app_name”>            <activity android:name=”.SmsServiceOptions” android:[email protected]/app_name”>                <intent-filter>                    <action android:name=”android.intent.action.MAIN” />                    <category android:name=”android.intent.category.LAUNCHER” />                </intent-filter>            </activity>            <service android:name=”.SmsService”>                <intent-filter>                    <action android:name=”com.easymorse.SmsService”></action>                </intent-filter>            </service>        </application>        <uses-sdk android:minSdkVersion=”3″ />    </manifest> 
1 楼 cdn_mn_mm 2011-09-21  
什么时候调用service的onDestroy方法呢
2 楼 ming_fanglin 2011-09-22  
stopService 时
  相关解决方案