广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    android基础教程之开机启动示例

    2018-04-16 10:58:13 次阅读 稿源:互联网
    广告

    Manifest.xml文件:
    代码如下:

    <service
                android:name=".DaemonService"
                android:enabled="true"
                android:process=".DaemonService" >
                <intent-filter android:priority="1000">
                    <action android:name="cn.test.DaemonService" />

                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </service>

    注释:因为我们这个服务要一直在后台运行,所以不采用bindService的方式,而是直接采用startService的方式。

    这样就不至于我们的程序结束,也把我们的服务也结束掉了。

    代码如下:

    package cn.start.test;

    import java.util.List;
    import android.annotation.SuppressLint;
    import android.app.ActivityManager;
    import android.app.Service;
    import android.app.ActivityManager.RunningAppProcessInfo;
    import android.content.Intent;
    import android.os.Handler;
    import android.os.IBinder;
    import android.util.Log;

    public class DaemonService extends Service {

        private static final String TAG = "Alarmreceiver";
        Handler hd1 = new Handler();
        int delay = 5000;

        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
        }

        @SuppressLint("NewApi")
        public void onCreate() {

            System.out.println("服务启动成功。。。。。。。。。。");
            hd1.postDelayed(mTasks, delay);

        }

        private Runnable mTasks = new Runnable() {
            @SuppressLint("NewApi")
            public void run() {
                android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_FOREGROUND);
                if (checkMainAppIsActive()) {
                    Log.d(TAG, "服务检测主应用还在运行");

                } else {
                    Log.d(TAG, "服务检测主应用已经关闭");
                    Intent intent = getPackageManager().getLaunchIntentForPackage(
                            "cn.start.test");
                    if (intent != null) {
                        DaemonService.this.startActivity(intent);
                        Log.d(TAG, "服务启动主应用程序。");
                    } else {
                        Log.d(TAG, "服务检测到没有安装主应用,自动退出。");
                        return;
                    }
                }
                hd1.postDelayed(mTasks, delay);

            }
        };

        /**
         * 检测是否主程序是否还在运行
         * @return
         */
        @SuppressLint({ "NewApi", "NewApi" })
        public boolean checkMainAppIsActive(){
            ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
            //获取正在运行的应用
            List<RunningAppProcessInfo> run = am.getRunningAppProcesses();
            for(RunningAppProcessInfo ra : run){
                if(ra.processName.equals("cn.start.test")){
                    return true;
                }
            }
            return false;
        }
    }

    开机自动启动程序,自然少不了开机启动广播了。

    manifest.xml 文件:
    代码如下:

    <receiver android:name=".StartupReceiver" >
                <intent-filter android:priority="1000" >
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                </intent-filter>
            </receiver>

    代码如下:

    public class StartupReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            Intent i = new Intent(context,LoginActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);

           
            Intent serviceIntent = new Intent(context,DaemonService.class);
            context.startService(serviceIntent);
        }
    }

    总结:开机启动广播一定在manifest文件中注册好。定时器要注意定时延迟。

    通过List<RunningAppProcessInfo> run = am.getRunningAppProcesses();判断自己的进程是否还在运行

    通过getPackageManager().getLaunchIntentForPackage( "cn.start.test"); getPackageManager().getLaunchIntentForPackage( "cn.start.test");

    来启动自己的程序。

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告