Я разрабатываю приложение для Android, которое создает диалоговое окно предупреждения, обнаруживая встряхивание. Я хочу запустить это приложение в фоновом режиме, чтобы всякий раз, когда мы встряхиваем телефон, приложение автоматически открывает диалоговое окно.Услуги или широковещательный приемник
Я столкнулся с проблемой на том месте, где я должен поместить модуль встряхивания.
Я поставил этот модуль в StartCammand(), но это didnot работа ..
Можно ли реализовать мое приложение с помощью BroadcastReceiver?
Пожалуйста, помогите .. Заранее спасибо.
Вот модуль, который будет генерировать диалоговое окно предупреждения при обнаружении встряхивания
public void onShake(float force) {
// TODO Auto-generated method stub
AlertDialog.Builder alertDialog=new AlertDialog.Builder(Shake.this);
alertDialog.setTitle("Confirm your condition");
alertDialog.setMessage("Are you OK?");
alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),"Take Care!!!", Toast.LENGTH_LONG).show();
}
});
alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "Emergency will be reached", Toast.LENGTH_LONG).show();
}
});
alertDialog.show();
}
Здесь я поставил код встряска в Команда пуска()
public int onStartCommand(Intent intent, int flags, int startid) {
SensorEventListener sensorEventListener = new SensorEventListener(){
private long now=0;
private long timeDiff=0;
private long lastUpdate=0;
private long lastShake=0;
private float x=0;
private float y=0;
private float z=0;
private float lastX=0;
private float lastY=0;
private float lastZ=0;
private float force=0;
public void onAccuracyChanged(Sensor sensor,int accuracy){}
public void onSensorChanged(SensorEvent event)
{
now=event.timestamp;
x=event.values[0];
y=event.values[1];
z=event.values[2];
if(lastUpdate==0)
{
lastUpdate=now;
lastShake=now;
lastX=x;
lastY=y;
lastZ=z;
Toast.makeText(aContext, "No motion is detected", Toast.LENGTH_LONG).show();
}
else
{
timeDiff=now-lastUpdate;
if(timeDiff>0)
{
force=Math.abs(x+y+z-lastX-lastY-lastZ);
if(Float.compare(force, threshold)>0)
{
if(now-lastShake>=interval)
{
listener.onShake(force);
}
else
{
Toast.makeText(aContext, "no motion is detected", Toast.LENGTH_LONG).show();
}
lastShake=now;
}
lastX=x;
lastY=y;
lastZ=z;
lastUpdate=now;
}
else
{
Toast.makeText(aContext, "no motion is detected", Toast.LENGTH_LONG).show();
}
}
listener.onAccelerometerChanged(x,y,z);
}
};
return START_STICKY;
}
Когда вы вызываете Context.startService() в службе? –
@ NathanielD.WaggonerI назовите его в классе MainActivity, где я передаю намерение, чтобы перейти к Activity, который расширяет Service – krati
См. Ответ. Вы не регистрируете слушателя, который вы создали. –