AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unlimited_restart.csh.unlimited_restart" android:sharedUserId="android.uid.system"> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-feature android:name="andorid.hardware.camera" /> <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" /> <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.DEVICE_POWER"/> <uses-permission android:name="android.permission.USE_FINGERPRINT"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true"> <activity android:name=".Unlimited_Restart_MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <service android:name=".ShutdownService"> <intent-filter android:priority="1000" > <action android:name="com.android.advancereset.ShutdownService"/> </intent-filter> </service> <receiver android:name=".ResetCompletedReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> <!--APK install SD cader --> <intent-filter > <action android:name="android.intent.action.MEDIA_MOUNTED" /> <action android:name="android.intent.action.MEDIA_EJECT" /> <data android:scheme="file" /> </intent-filter> </receiver> </application> </manifest>
Android.mk
TOP_LOCAL_PATH:= $(call my-dir)
LOCAL_PATH:= $(TOP_LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := Unlimited_Restart
LOCAL_CERTIFICATE := platform
LOCAL_PROGUARD_ENABLED := disabled
include $(BUILD_PACKAGE)
包名目錄:Unlimited_Restart\src\com\unlimited_restart\csh\unlimited_restart
主文件:
ResetCompletedReceiver :
package com.unlimited_restart.csh.unlimited_restart; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; /** * Executed when a new version of the application is is installed. */ public class ResetCompletedReceiver extends BroadcastReceiver{ public static final String TAG = "csh"; public static String app_info = ""; @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "Unlimited_Restart_MainActivity"); Intent intent1 = new Intent(); intent1.setClass(context, Unlimited_Restart_MainActivity.class); context.startActivity(intent1); } public void I2C_app_info(String sys_path) { String line = ""; String Testing = ""; try { Runtime runtime = Runtime.getRuntime(); Process process = runtime.exec("cat " + sys_path); InputStream is = process.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); while (null != (line = br.readLine())) { //Strings(line); app_info = line; Log.d(TAG, "ResetCompletedReceiver app_info = "+app_info); } } catch (IOException e) { e.printStackTrace(); } } }
ShutdownService:
/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.unlimited_restart.csh.unlimited_restart; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.Toast; import android.app.Service; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.Process; import android.app.Activity; import java.io.IOException; import java.util.Timer; import android.os.PowerManager; import android.os.PowerManager.WakeLock; /** * Executed when a new version of the application is is installed. */ public class ShutdownService extends Service { private static final String TAG = "csh" ; private static final String WAKE_TAG = "AdvancedResetShutdown"; public static final String ACTION = "com.android.advancereset.ShutdownService"; public static final int DEFAULT_SHUTDOWN_DELAY_TIME = 10*1000;//Device will be auto shutdown private WakeLock mWakeLock = null; private WakeLock mPartialWakeLock = null; private PowerManager mPowerManger; @Override public IBinder onBind(Intent intent) { Log.v(TAG, "ShutdownService onBind"); return null; } @Override public void onCreate() { Log.v(TAG, "ShutdownService onCreate"); super.onCreate(); mPowerManger = (PowerManager)this.getSystemService(Context.POWER_SERVICE); mWakeLock = mPowerManger.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, WAKE_TAG); mPartialWakeLock = mPowerManger.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKE_TAG); } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); Log.i("AdvanceReset", "onStart"); if (null != mPartialWakeLock) { mPartialWakeLock.acquire(); } Timer timer = new Timer(); timer.schedule(new ShutDownTask(), DEFAULT_SHUTDOWN_DELAY_TIME, 15000); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.v(TAG, "ShutdownService onStartCommand"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); Log.i(TAG, "onDestroy()"); if (null != mWakeLock) { mWakeLock.release(); mWakeLock = null; } if (null != mPartialWakeLock) { mPartialWakeLock.release(); mPartialWakeLock = null; } } public class ShutDownTask extends java.util.TimerTask{ @Override public void run() { // TODO Auto-generated method stub Intent i = new Intent(Intent.ACTION_REBOOT);//ACTION_REQUEST_SHUTDOWN); i.putExtra(Intent.EXTRA_KEY_CONFIRM, false); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i); Log.i("AdvanceReset", "shutdown..."); } } }
Unlimited_Restart_MainActivity:
package com.unlimited_restart.csh.unlimited_restart; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; public class Unlimited_Restart_MainActivity extends Activity { public static final String TAG = "csh"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_unlimited__restart__main); Log.d(TAG, "Unlimited_Restart_MainActivity onCreate"); Intent i = new Intent(); i.setClass(this,ShutdownService.class); this.startService(i); } }