public
?class
?SplitterActivity?
extends
?Activity?
implements
?SensorEventListener?{
?
????
private
?ImageView?imageViewResult;
?
????
private
?TextView?textViewMsg;
?
????
private
?int
[][]?result?=?
new
?int
[][]?{
????????????
{?R.drawable.rock,?R.string.rock_result_msg?},
????????????
{?R.drawable.paper,?R.string.paper_result_msg?},
????????????
{?R.drawable.scissors,?R.string.scissors_result_msg?}?};
?
????
private
?SensorManager?sensorManager;
?
????
private
?Sensor?sensor;
?
????
private
?Vibrator?vibrator;
?
????
private
?SoundPool?soundPool;
?
????
private
?int
?streamSoundId;
?
????
private
?static
?final
?int
?UPDATE_VIEW?=?
0x01
;
?
????
private
?Handler?handler?=?
new
?Handler()?{
?
????????
@Override
????????
public
?void
?handleMessage(Message?msg)?{
????????????
if
?(msg.what?==?UPDATE_VIEW)?{
????????????????
if
?(vibrator.hasVibrator())?{
????????????????????
vibrator.vibrate(
new
?long
[]?{?200L,?500L?},?-
1
);
????????????????
}
????????????????
soundPool.play(streamSoundId,?
0
.5F,?
0
.5F,?
5
,?
0
,?
1
.0F);
?
????????????????
Random?random?=?
new
?Random();
????????????????
int
?index?=?random.nextInt(result.length);
????????????????
imageViewResult.setImageResource(result[index][
0
]);
????????????????
textViewMsg.setText(result[index][
1
]);
????????????
}
????????
}
????
};
?
????
public
?SplitterActivity()?{
????
}
?
????
@Override
????
protected
?void
?onCreate(Bundle?savedInstanceState)?{
????????
super
.onCreate(savedInstanceState);
????????
this
.setContentView(R.layout.activity_splitter);
?
????????
imageViewResult?=?(ImageView)?
this
.findViewById(R.id.image_result);
????????
textViewMsg?=?(TextView)?
this
.findViewById(R.id.text_msg);
?
????????
sensorManager?=?(SensorManager)?
this
.getSystemService(SENSOR_SERVICE);
????????
sensor?=?sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
????????
vibrator?=?(Vibrator)?
this
.getSystemService(VIBRATOR_SERVICE);
?
????????
soundPool?=?
new
?SoundPool(
10
,?AudioManager.STREAM_SYSTEM,?
5
);
????????
streamSoundId?=?soundPool.load(
this
,?R.raw.call_result,?
0
);
?
????
}
?
????
@Override
????
protected
?void
?onResume()?{
????????
super
.onResume();
????????
sensorManager.registerListener(
this
,?sensor,
????????????????
SensorManager.SENSOR_DELAY_NORMAL);
????
}
?
????
@Override
????
protected
?void
?onStop()?{
????????
sensorManager.unregisterListener(
this
);
????????
if
?(
null
?!=?vibrator)?{
????????????
vibrator.cancel();
????????????
vibrator?=?
null
;
????????
}
?
????????
if
?(
null
?!=?soundPool)?{
????????????
soundPool.release();
????????????
soundPool?=?
null
;
????????
}
????????
super
.onStop();
????
}
?
????
@Override
????
public
?void
?onSensorChanged(SensorEvent?event)?{
?
????????
if
?(event.sensor.getType()?==?Sensor.TYPE_ACCELEROMETER)?{
????????????
float
[]?values?=?event.values;
????????????
if
?(isNormalAcceler(values))?{
?
????????????????
new
?Thread(
new
?Runnable()?{
?
????????????????????
@Override
????????????????????
public
?void
?run()?{
????????????????????????
Message?msg?=?
new
?Message();
????????????????????????
msg.what?=?UPDATE_VIEW;
????????????????????????
handler.sendMessage(msg);
????????????????????
}
????????????????
}).start();
????????????
}
????????
}
????
}
?
????
private
?boolean
?isNormalAcceler(
float
[]?values)?{
????????
int
?g?=?
15
;
????????
return
?(Math.abs(values[
0
])?>?g?&&?Math.abs(values[
1
])?>?g)
????????????????
||?Math.abs(values[
2
])?>?g;
????
}
?
????
@Override
????
public
?void
?onAccuracyChanged(Sensor?sensor,?
int
?accuracy)?{
?
????
}
?
????
@Override
????
public
?boolean
?onKeyDown(
int
?keyCode,?KeyEvent?event)?{
????????
if
?(keyCode?==?KeyEvent.KEYCODE_BACK)?{
????????????
BackListener?backListener?=?
new
?BackListener();
????????????
new
?AlertDialog.Builder(
this
)
????????????????????
.setIcon(android.R.drawable.ic_dialog_info)
????????????????????
.setTitle(R.string.app_name)
????????????????????
.setMessage(R.string.exite_app_info)
????????????????????
.setPositiveButton(R.string.leave,?backListener)
????????????????????
.setNegativeButton(R.string.without,?backListener).show();
????????????
return
?true
;
????????
}
????????
return
?super
.onKeyDown(keyCode,?event);
????
}
?
????
private
?class
?BackListener?
implements
?DialogInterface.OnClickListener?{
?
????????
@Override
????????
public
?void
?onClick(DialogInterface?dialog,?
int
?which)?{
????????????
switch
?(which)?{
????????????
case
?DialogInterface.BUTTON_POSITIVE:
????????????????
SplitterActivity.
this
.finish();
????????????????
break
;
????????????
case
?DialogInterface.BUTTON_NEGATIVE:
????????????????
break
;
????????????
default
:
????????????????
break
;
????????????
}
????????
}
????
}
}