0

我需要强制 android 设备在应用程序运行时保持活动状态。有什么办法可以做到这一点?我在这里读到:有没有办法让安卓设备保持清醒?关于这一点,我尝试这样做,但可能我不知道正确使用服务。

这是我使用的代码:

public class WakeLockService extends Service {

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}
@Override
public void onCreate() {
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
    wl.acquire();
}
@Override
public void onDestroy() {
    wl.release();
}

在我的应用程序的第一个活动中,我放了这个:

Intent s = new Intent(this, WakeLockService.class);
startService(s);

我在做什么正确吗?任何人都可以帮我做到这一点?提前致谢。

4

2 回答 2

3

如果您希望设备在显示您的应用程序的活动时保持清醒,您必须在创建活动时设置标志 FLAG_KEEP_SCREEN_ON:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    Window window = getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); // Unlock the device if locked
    window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); // Turn screen on if off
    window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // Keep screen on
    .....
}

在清单中添加权限 WAKE_LOCK:

<uses-permission android:name="android.permission.WAKE_LOCK" />

编辑在看到您的最后一条评论后:是的,您需要一项服务:请注意,设备无论如何都会进入睡眠状态,但如果您向用户明确说明(您必须显示通知)并声明它,您的服务可以继续运行黏:

public class yourservice extends Service
{
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        //The intent to launch when the user clicks the expanded notification
        /////////////////////////////////////////////////////////////////////
        Intent forPendingIntent = new Intent(this, si.test.app.activities.activity.class);
        forPendingIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        PendingIntent pendIntent = PendingIntent.getActivity(this, 0, forPendingIntent, 0);

        Notification notification = new Notification(R.drawable.icon, "testapp", System.currentTimeMillis());
        notification.setLatestEventInfo(this, "testApp", "testApp is running", pendIntent);

        notification.flags |= Notification.FLAG_NO_CLEAR;
        startForeground (R.string.app_name, notification);
        return START_STICKY;
    }
    ...
}
于 2012-11-02T15:06:00.367 回答
2

例如,在我的应用程序中,我有一个同步服务器-> 移动,这个同步可以运行超过 5 分钟。我想强制设备不进入待机,看看同步过程何时完成

同步操作应该由一些 Android 组件管理,例如服务。该组件可以管理一个WakeLock. 不要纯粹为 . 创建一些单独的组件WakeLock,因为其他组件与您的同步工作没有任何关系。

例如,如果您的同步是通过 进行的IntentService,您可以使用myWakefulIntentService在进行工作时保持设备唤醒onHandleIntent()

于 2012-11-02T15:12:30.987 回答