1

電源ボタンが押されたときに応答できるアプリケーションを作成しようとしています。より具体的には、2、3回押すと反応します。

とりあえず、以下をやってみました。

public class SMSKey extends BroadcastReceiver{

    static int countPowerOff = 0;
    private Activity activity = null;
    public SMSKey(Activity activity){
        this.activity = activity;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){
            countPowerOff++;
        }else if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
            if(countPowerOff == 2){
                Intent i = new Intent(activity, SMSOptions.class);
                activity.startActivity(i);
            }
        }
    }

}

そして私のマニフェストで:

<receiver android:name=".SMSKey">
        <intent-filter >
            <action android:name="android.intent.action.SCREEN_OFF"/>
            <action android:name="android.intent.action.SCREEN_ON"/>
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
            <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
            <action android:name="android.intent.action.ACTION_SHUTDOWN"/>
        </intent-filter>
    </receiver>

最後に私のMainActivty.javaで:

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
SMSKey mReceiver = new SMSKey(this);
registerReceiver(mReceiver, filter);

これは機能しますが、1 回目のみ機能し、電源ボタンを押したときに 2 回目または 3 回目の試行では機能しません。どうしてこんなことに ??

もう 1 つの質問: ご覧のとおり、私は MainActivity でこの KeyPress イベントを使用しています。つまり、アプリケーションは常に開いている必要があります。MainActivity に入らずにこれを実装できる他の方法はありますか。

4

2 に答える 2

0

ここに解決策があります

public class MyReceiver extends BroadcastReceiver {
private static int countPowerOff = 0;

public MyReceiver (){

}

@Override
public void onReceive(Context context, Intent intent){
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){    
    Log.e("In on receive", "In Method:  ACTION_SCREEN_OFF");
    countPowerOff++;
}
else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
    Log.e("In on receive", "In Method:  ACTION_SCREEN_ON");
}
else if(intent.getAction().equals(Intent.ACTION_USER_PRESENT)){
    Log.e("In on receive", "In Method:  ACTION_USER_PRESENT");
    if (countPowerOff >= 2)
    {
        countPowerOff=0;
        Toast.makeText(context, "MAIN ACTIVITY IS BEING CALLED ", Toast.LENGTH_LONG).show();
        Intent i = new Intent(context, About.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
        context.startActivity(i);
    }
}
  }
 }
于 2014-05-06T09:42:26.647 に答える