APK: 开机自启

1.1.AndroidMainfest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xinhua.bootservice"
    android:versionCode="1"
    android:versionName="1.0" >

     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     <uses-permission android:name = "android.permission.GET_TASKS"/>
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

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

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name="com.xinhua.bootservice.MyBroadcast" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        
        <service android:name="com.xinhua.bootservice.BootService" ></service>
    </application>

</manifest>

1.2.MainActivity.java

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xinhua.bootservice"
    android:versionCode="1"
    android:versionName="1.0" >

     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     <uses-permission android:name = "android.permission.GET_TASKS"/>
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

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

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name="com.xinhua.bootservice.MyBroadcast" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        
        <service android:name="com.xinhua.bootservice.BootService" ></service>
    </application>

</manifest>  

1.4.BootService.java

package com.xinhua.bootservice;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.util.Calendar;

import java.util.TimerTask;

import com.android.xhapimanager.XHApiManager;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;

import android.os.IBinder;
import android.util.Log;

public class BootService extends Service {

    private String TAG = "gatsby";
    private String outPackageInfo;
    private String PACKAGE_NAME = "com.gongfubao.attendance";
    private String PACKAGE_ACTIVITY = "com.gongfubao.attendance.ui.StartActivity";
    // XHApiManager apimanager;

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

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        Log.d(TAG, "onCreate");

        // ApplicationLauncher(PACKAGE_NAME,PACKAGE_ACTIVITY);
        SetRtc_Time();
        // apimanager = new XHApiManager();

    }

    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        super.onStart(intent, startId);

        /*
         * MyTimerTask timerTask = new MyTimerTask(); Timer timer = new Timer(true);
         * timer.schedule(timerTask, 0, 60000);// 定时每30秒执行一次
         */
    }

    public void SetRtc_Time() {

        Runnable run = new Runnable() {

            @Override
            public void run() {

                while (true) {
                    Calendar calendar = Calendar.getInstance();
                    int hour = calendar.get(Calendar.HOUR_OF_DAY);
                    int minute = calendar.get(Calendar.MINUTE);
                    int miao = calendar.get(Calendar.SECOND);
                    // Log.d(TAG,"hour"+hour);
                    // Log.d(TAG,"minute"+minute);
                    // Log.d(TAG,"miao"+miao);
                    if (2 == hour && 59 == minute) {
                        // Log.d(TAG,"18==hour && 30==minute");
                        sendBroadcast(new Intent().setAction(""));
                        // apimanager.XHReboot();
                        // break;
                    }

                    try {
                        Thread.sleep(1000);// 设置间隔
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        };
        Thread t1 = new Thread(run);
        t1.start();

    }

    public class MyTimerTask extends TimerTask {
        @Override
        public void run() {

            String packageInfo = RootCommand("dumpsys window | grep mCurrentFocus");
            Log.d(TAG, "packageInfo = " + packageInfo);
            if (!(packageInfo.contains(PACKAGE_NAME))) {
                Log.d(TAG, "PACKAGE_NAME============11111 ");
                ApplicationLauncher(PACKAGE_NAME, PACKAGE_ACTIVITY);
            }
        }
    }

    private boolean ApplicationLauncher(String PackageName, String ActivityName) {
        ComponentName componentName = new ComponentName(PackageName, ActivityName);
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.setComponent(componentName);
        if (getApplication().getPackageManager().resolveActivity(intent, 0) == null) {
            return false; // no this activity
        }
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        getApplication().startActivity(intent);
        return true;
    }

    private String RootCommand(String cmd) {
        Process process = null;
        DataOutputStream os = null;
        DataInputStream is = null;
        try {
            process = Runtime.getRuntime().exec("su");
            os = new DataOutputStream(process.getOutputStream());
            os.writeBytes(cmd + "\n");
            os.writeBytes("exit\n");
            os.flush();

            int aa = process.waitFor();
            is = new DataInputStream(process.getInputStream());

            byte[] buffer = new byte[is.available()];
            is.read(buffer);

            outPackageInfo = new String(buffer);
            Log.d(TAG, outPackageInfo);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (os != null) {
                    os.close();
                }
                if (is != null) {
                    is.close();
                }
                process.destroy();
            } catch (Exception e) {
            }
        }
        return outPackageInfo;
    }

}

  

 

posted @ 2020-05-18 19:16  CrushGirl  阅读(709)  评论(0编辑  收藏  举报