0

アプリケーションの実行中にAndroidデバイスを強制的に存続させる必要があります。これを行う方法はありますか?私はここで読んだ: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でください。他のコンポーネントは同期作業とはまったく関係がないためです。

たとえば、同期が を介して実行されている場合、 myIntentServiceを使用して、 での作業が行われている間、デバイスを起動したままにすることができます。WakefulIntentServiceonHandleIntent()

于 2012-11-02T15:12:30.987 に答える