1

画面がタイムアウトしてオフになった後、プログラムで電話を振動させる方法を探しています。私は多くの研究を行ってきましたが、うまくいくものを見つけていません。PowerManager クラス、より具体的には WakeLock メカニズムを調べました。多くの投稿の音から、WakeLock クラスの PARTIAL_WAKE_LOCK 変数を使用する必要があります。

PARTIAL_WAKE_LOCK - CPU が実行されていることを保証するウェイク ロック。

ただし、画面がオフになったときに電話を振動させることはできません。SCREEN_DIM_WAKE_LOCK を機能させることができるので、WakeLock を正しく使用していることはわかっています。PARTIAL_WAKE_LOCK は私が探しているものですか?

4

2 に答える 2

4
 @Override

    public void onCreate() {

        super.onCreate();

        // REGISTER RECEIVER THAT HANDLES SCREEN ON AND SCREEN OFF LOGIC

        IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);

        filter.addAction(Intent.ACTION_SCREEN_OFF);

        BroadcastReceiver mReceiver = new ScreenReceiver();

        registerReceiver(mReceiver, filter);

    }



    @Override

    public void onStart(Intent intent, int startId) {

        boolean screenOn = intent.getBooleanExtra("screen_state", false);

        if (!screenOn) {

            // Get instance of Vibrator from current Context
            Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
           // This example will cause the phone to vibrate "SOS" in Morse Code
           // In Morse Code, "s" = "dot-dot-dot", "o" = "dash-dash-dash"
           // There are pauses to separate dots/dashes, letters, and words
           // The following numbers represent millisecond lengths
            int dot = 200;      // Length of a Morse Code "dot" in milliseconds
           int dash = 500;     // Length of a Morse Code "dash" in milliseconds
            int short_gap = 200;    // Length of Gap Between dots/dashes
           int medium_gap = 500;   // Length of Gap Between Letters
           int long_gap = 1000;    // Length of Gap Between Words
            long[] pattern = {
             0,  // Start immediately
             dot, short_gap, dot, short_gap, dot,    // s
             medium_gap,
             dash, short_gap, dash, short_gap, dash, // o
            medium_gap,
            dot, short_gap, dot, short_gap, dot,    // s
           long_gap
           };

           // Only perform this pattern one time (-1 means "do not repeat")
          v.vibrate(pattern, -1);


        } else {

            // YOUR CODE

        }

    }

ブロックの外側の Manifest.xml ファイルに uses-permission 行を追加する必要があることに注意してください。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="...">
<uses-permission android:name="android.permission.VIBRATE"/>

注:このコードを実際の電話でもテストする必要があります。エミュレータは振動できません

于 2011-09-07T06:38:31.777 に答える
1

私にとっての解決策は、パターンなしで直接バイブレーションを使用することだったので、PowerManager を使用してロックを解除する必要はありません。

于 2013-08-23T09:41:30.137 に答える