文件修改1:
修改路径:px30_android-8.1\frameworks\base\services\core\java\com\android\server\display\DisplayManagerService.java
改三处地方:
import android.util.SparseArray;
import android.view.Display;
import android.view.DisplayInfo;
import android.view.Surface;
import android.view.WindowManagerInternal;
+ import android.media.AudioManager;
import com.android.server.AnimationThread;
import com.android.server.DisplayThread;
import com.android.server.LocalServices;
private WindowManagerInternal mWindowManagerInternal;
private InputManagerInternal mInputManagerInternal;
private IMediaProjectionManager mProjectionService;
+ AudioManager mAudioManager;
// The synchronization root for the display manager.
// This lock guards most of the display manager's state.
// NOTE: This is synchronized on while holding WindowManagerService.mWindowMap so never call
// into WindowManagerService methods that require mWindowMap while holding this unless you are
// very very sure that no deadlock can occur.
PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
mGlobalDisplayBrightness = pm.getDefaultScreenBrightnessSetting();
+ mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
}
public void setupSchedulerPolicies() {
int diff = device.mDebugLastLoggedDeviceInfo.diff(info);
if (diff == DisplayDeviceInfo.DIFF_STATE) {
Slog.i(TAG, "Display device changed state: \"" + info.name
+ "\", " + Display.stateToString(info.state));
+ if (info.state == Display.STATE_OFF){
+ mAudioManager.setStreamVolume(AudioManager.STREAM_RING, 0, AudioManager.FLAG_PLAY_SOUND);
+ mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, 0, AudioManager.FLAG_PLAY_SOUND);
+ mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, AudioManager.FLAG_PLAY_SOUND);
+ }
} else if (diff != 0) {
Slog.i(TAG, "Display device changed: " + info);
}
文件修改2:
修改路径:px30_android-8.1\frameworks\base\services\java\com\android\server\HookObserver.java
class HookObserver extends UEventObserver {
private static final String TAG = HookObserver.class.getSimpleName();
private static final boolean LOG = true;
private static final String HOOK_UEVENT_MATCH = "DEVPATH=/devices/virtual/switch/hook"; // sys/devices/virtual/switch/hook
private static final String HOOK_STATE_PATH = "/sys/class/switch/hook/state";
//protected broadcast需要在frameworks/base/core/res/AndroidManifest.xml 文件夹声明一下
public static final String ACTION_HOOK_EVENT = "android.intent.action.HOOK_EVENT";
public static final String EXTRA_HOOK_STATE = "android.intent.extra.HOOK_STATE";
public static final String PROPERTY_HOOK_STATE = "hw.hook.state";
public static final int EXTRA_HOOK_STATE_INIT = -1;
public static final int EXTRA_HOOK_STATE_ON = 0;
public static final int EXTRA_HOOK_STATE_OFF = 1;
private int mHookState = EXTRA_HOOK_STATE_INIT;
private int mPreviousHookState = EXTRA_HOOK_STATE_INIT;
private static final int MSG_HOOK_STATE = 0;
private static final int MSG_SHUTDOWN = 1;
private boolean mSystemReady = false;
// private final CheckBoxPreference mCheckBoxPref;
private boolean flag = true;
private WifiManager wifiManager;
- //AudioManager audioManager;
+ AudioManager mAudioManager;
//private EthernetManager mEthManager;
private final Context mContext;
//MediaPlayer mp = new MediaPlayer();
// private PowerManagerService mPowerManager;
// private final WakeLock mWakeLock; // held while there is a pending route change
// private final WakeLock mCpuWakeLock; // block the CPU go to sleep
private static final String SHUTDOWN_ACTION = "com.jld.shutdown_action";
private static final String SETTIME_ACTION = "com.jld.set_time_action";
public HookObserver(Context context) {
mContext = context;
/* mPowerManager = pms;
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP, "HookObserver");
mWakeLock.setReferenceCounted(false);
mCpuWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "HookObserver CPU waklock");
mCpuWakeLock.setReferenceCounted(false);
mCpuWakeLock.acquire(); */
- //audioManager =(AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
+ mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
init(); // set initial status
//
/* try {
mp.setDataSource("/system/media/boot.wav");
mp.prepare();
mp.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Slog.v(TAG, "boot music ok");*/
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BOOT_COMPLETED);
filter.addAction(SHUTDOWN_ACTION);
filter.addAction(SETTIME_ACTION);
mContext.registerReceiver(mBroadcastReceiver, filter, null, null);
startObserving(HOOK_UEVENT_MATCH);
}
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (LOG) Slog.v(TAG, "BroadcastReceiver:" + action);
if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
//add boot music for yong
// setAirplaneModeOn(true);
// delay(10000);
// setAirplaneModeOn(false);
// Slog.v(TAG, "open airplane");
/*if(mp != null){
mp.stop();
mp.release();
}
// Slog.v(TAG, "boot music ok");*/
// don't bother broadcasting undocked here
// if (mHookState != EXTRA_HOOK_STATE_INIT) {
update();
Slog.v(TAG, "hook update"+ mHookState);
// }
+ mAudioManager.setStreamVolume(AudioManager.STREAM_RING, 0, AudioManager.FLAG_PLAY_SOUND);
+ mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, 0, AudioManager.FLAG_PLAY_SOUND);
+ mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, AudioManager.FLAG_PLAY_SOUND);
}else if(action.equals(SHUTDOWN_ACTION)){
Intent intent1 = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
intent1.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
}else if(action.equals(SETTIME_ACTION)){
long time = intent.getLongExtra("time",0L);
if(time > 0L)
((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).setTime(time);
}
}
};