我想使用PowerManager的wakeUp方法。Eclipse (ADT)不识别此方法。但是对于相反的"goToSleep“来说没有问题:
PowerManager pm = (PowerManager) MyApplication.getAppContext().getSystemService(Context.POWER_SERVICE);
pm.wakeUp(SystemClock.uptimeMillis()); //Detected as error by eclipse
pm.goToSleep(SystemClock.uptimeMillis()); //Not detected as error and work wellEclipse错误:
The method wakeUp(long) is undefined for the type PowerManagerEclipse向我提出了一个快速修复方案,但我也犯了同样的错误:
((Object) pm).wakeUp(SystemClock.uptimeMillis()); //the same error 这是个bug还是我的问题?谢谢!
发布于 2013-03-22 03:53:30
首先,正如Luksprog指出的那样,该方法是API级别17的新方法。
此外,它还需要DEVICE_POWER权限,只有使用与固件签名相同的签名密钥签名的应用程序才能持有该权限。
发布于 2015-01-06 20:02:59
我看到你有一个定制的rom。您可以从uiautomator使用sleep()和wakeUp(),从api级别16开始,基本上可以实现与PowerManager wakeUp()和goToSleep()相同的功能,但不会受到os (android.permission.DEVICE_POWER)不会授予您的权限的限制。
请看我的另一个answer,我在这里更详细地解释了什么是设置。
发布于 2019-10-22 19:38:10
您应该了解一下PowerManager WakeLock API,特别是标志ACQUIRE_CAUSES_WAKEUP。
ACQUIRE_CAUSES_WAKEUP (在API级别1中增加)
public static final int ACQUIRE_CAUSES_WAKEUP
唤醒锁标志:获取唤醒锁后开启屏幕。
正常情况下,唤醒锁实际上并不会唤醒设备,它们只会导致屏幕在已经打开时保持打开状态。将视频播放器应用程序视为正常行为。弹出并希望设备打开的通知是例外;使用此标志可以像它们一样。
不能与PARTIAL_WAKE_LOCK一起使用。
常量值: 268435456 (0x10000000)
注意:要使用此权限,您的应用程序的AndroidMainfest.xml必须使用WAKE_LOCK权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />到API level 29为止的API文档相当令人困惑,因为ACQUIRE_CAUSES_WAKEUP标志必须与一个有效的级别组合,否则PowerManager将抛出一个IllegalArgumentException:必须指定一个有效的唤醒锁级别。
遗憾的是,所有可用级别要么已被弃用,要么明确不允许与此标志组合:
PARTIAL_WAKE_LOCK:不能与标记一起使用flagSCREEN_DIM_WAKE_LOCK:不推荐使用,因为17SCREEN_BRIGHT_WAKE_LOCK:不推荐使用ACQUIRE_CAUSES_WAKEUP 15FULL_WAKE_LOCK:不推荐使用因为17PROXIMITY_SCREEN_OFF_WAKE_LOCK:不能与ACQUIRE_CAUSES_WAKEUP标志一起使用
因此,在我的应用程序中,我决定将ACQUIRE_CAUSES_WAKEUP标志与SCREEN_BRIGHT_WAKE_LOCK相结合,因为它比FULL_WAKE_LOCK更邪恶,而比SCREEN_DIM_WAKE_LOCK更有用。
所以我的wakeUp实现如下所示(请注意,我倾向于让用户启用/禁用唤醒功能,并定义一个方法来在应用程序被终止时释放唤醒锁/onDestroy):
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.PowerManager;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.preference.PreferenceManager;
public class MainActivity extends AppCompatActivity {
/** Interval of 1 second in milliseconds */
static final long INTERVAL_SECOND = 1000;
/** Interval of 1 minute in milliseconds */
static final long INTERVAL_MINUTE = 60 * INTERVAL_SECOND;
SharedPreferences sharedPrefs = null;
PowerManager.WakeLock mWakeLock = null;
Context applicationContext = null;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final String TAG = "onCreate";
applicationContext = getApplicationContext();
setContentView(R.layout.activity_main);
final Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
PreferenceManager
.setDefaultValues(this, R.xml.root_preferences, false);
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
}
void wakeUp() {
final String TAG = "wakeUp";
if (sharedPrefs == null) {
Log.w(TAG, "Shared Preferences was null");
return;
}
final boolean isWakeUpPref = SettingsActivity.isWakelockPref(sharedPrefs);
if (!isWakeUpPref) {
Log.i(TAG, "WakeUp is disabled via preference");
return;
}
Log.i(TAG, "WakeUp is enabled via preference");
if (mWakeLock == null) {
Log.i(TAG, "Creating WakeLock...");
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
if (pm == null) {
Log.w(TAG, "could not get Power Service");
return;
}
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "MyApp:wakeup");
Log.i(TAG, "WakeLock created!");
} else if (mWakeLock.isHeld()) {
Log.i(TAG, "Releasing old WakeLock, to reacquire with fresh timeout");
mWakeLock.release();
}
Log.i(TAG, "Acquiring WakeLock to WakeUp...");
mWakeLock.acquire(INTERVAL_MINUTE);
Log.i(TAG, "WakeLock WakeUp acquired!");
}
void releaseWakeLock() {
final String TAG = "releaseWakeLock";
if (mWakeLock == null) {
return;
}
if (!mWakeLock.isHeld()) {
Log.w(TAG, "WakeLock not held!");
return;
}
mWakeLock.release();
Log.i(TAG, "WakeLock released!");
}
}https://stackoverflow.com/questions/15556508
复制相似问题