В основном, я хочу, чтобы мое приложение выполняло что-то в фоновом режиме, когда дважды нажата гарнитура. Этот код работает, только если я хочу получать информацию от отладчика, то, что я пытаюсь сделать, это вызвать метод из основного действия или нажать кнопку из основного действия.Доступ к основному виду деятельности/компонентам из широковещательного приемника
Пример: После того, как я уловил двойной щелчок на гарнитуре, нажмите кнопку из основного действия.
Любые предложения о том, как это сделать?
P.D.
Это мое первое приложение на Android, поэтому мне хотелось бы получить от него некоторые отзывы.
Мой телефон Android 4.4.2 на тот случай, если кто-нибудь скажет мне, почему я не использовал MediaSession или что-то еще. (Я знаю registerMediaButtonEventReceiver осуждается)
приемник Класс:
public class MediaReceiver extends BroadcastReceiver {
private static int d = 0;
public MediaReceiver() {
}
@Override
public void onReceive(final Context context, Intent intent) {
String intentAction = intent.getAction();
if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction))
return;
KeyEvent event = (KeyEvent) intent
.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
int keycode = event.getKeyCode();
int action = event.getAction();
switch (keycode) {
case KeyEvent.KEYCODE_HEADSETHOOK:
if (action == KeyEvent.ACTION_DOWN) {
d++;
Handler handler = new Handler();
Runnable r = new Runnable() {
@Override
public void run() {
if (d == 1) {
Log.i("Info", "single click!");
}
// double click
if (d == 2) {
Log.i("Info", "double click!");
//handleClick(); this method is inside MainActivity
}
d = 0;
}
};
if (d == 1) {
handler.postDelayed(r, 400);
}
}
break;
}
abortBroadcast();
}
}
OnCreate MainActivity класс:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtText = (TextView) findViewById(R.id.status);
btnStart = (ImageButton) findViewById(R.id.startButton);
focus = (Chronometer) findViewById(R.id.chronometer);
btnStart.setBackgroundResource(R.drawable.start_button);
focus.setFormat("%s");
manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = manager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "Proximity screen");
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
mReceiverComponent = new ComponentName(this, MediaReceiver.class);
FillTaskScrollList();
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (headsetState == DISABLED_HEADSET_BUTTON) {
headsetState = ENABLED_HEADSET_BUTTON;
wl.acquire();
...
focus.stop();
focus.setBase(SystemClock.elapsedRealtime());
btnStart.setBackgroundResource(R.drawable.stop_button);
mAudioManager.registerMediaButtonEventReceiver(mReceiverComponent);
} else {
headsetState = DISABLED_HEADSET_BUTTON;
wl.release();
...
focus.stop();
btnStart.setBackgroundResource(R.drawable.start_button);
}
}
});
}