Reputation: 49
I want to send a message when the accelerometer tracks that someone has fallen with the phone. I have tried some stuff, but when I run it on my phone, it "Stops Unfortunately" as an app usually does when there is an error. I got just one activity : MainActivity.java:
package com.mycompany.accelerometer;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.gsm.SmsManager;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements SensorEventListener{
MediaPlayer dangerSound ;
private Sensor mySensor ;
private SensorManager SM ;
public TextView PhoneNumber ;
public String TextMessage ;
public String numText ;
public SmsManager manager ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
manager = SmsManager.getDefault();
SM = (SensorManager)getSystemService(SENSOR_SERVICE);
mySensor = SM.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
SM.registerListener(this , mySensor , SensorManager.SENSOR_DELAY_NORMAL);
dangerSound = MediaPlayer.create(this , R.raw.warning_sound);
PhoneNumber = (TextView) findViewById(R.id.PhoneNumber);
numText = PhoneNumber.getText().toString();
TextMessage = "Help me, I have fallen !!!";
}
@Override
public void onSensorChanged(SensorEvent event) {
double x = event.values[0];
double y = event.values[1];
double z = event.values[2];
double vector = Math.sqrt(x*x + y*y + z*z);
if(vector >= 20){
dangerSound.start();
manager.sendTextMessage(numText , null , TextMessage , null , null);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// Not using`enter code here`
}
}
my logcat
12-01 22:33:42.239 15762-15762/? E/Zygote: MountEmulatedStorage()
12-01 22:33:42.239 15762-15762/? I/libpersona: KNOX_SDCARD checking this for 10231
12-01 22:33:42.239 15762-15762/? E/Zygote: v2
12-01 22:33:42.239 15762-15762/? I/libpersona: KNOX_SDCARD not a persona
12-01 22:33:42.239 15762-15762/? I/SELinux: Function: selinux_compare_spd_ram, SPD-policy is existed. and_ver=SEPF_SM-E700H_4.4.4 ver=A046
12-01 22:33:42.239 15762-15762/? I/SELinux: Function: selinux_compare_spd_ram , priority [2] , priority version is VE=SEPF_SM-E700H_5.1.1_0039
12-01 22:33:42.239 15762-15762/? E/SELinux: [DEBUG] get_category: variable seinfo: default sensitivity: NULL, cateogry: NULL
12-01 22:33:42.249 15762-15762/? I/art: Late-enabling -Xcheck:jni
12-01 22:33:42.289 15762-15762/? D/TimaKeyStoreProvider: TimaSignature is unavailable
12-01 22:33:42.289 15762-15762/? D/ActivityThread: Added TimaKeyStore provider
12-01 22:33:42.359 15762-15762/com.mycompany.accelerometer D/SecWifiDisplayUtil: Metadata value : none
12-01 22:33:42.389 15762-15762/com.mycompany.accelerometer D/PhoneWindow: *FMB* installDecor mIsFloating : false
12-01 22:33:42.389 15762-15762/com.mycompany.accelerometer D/PhoneWindow: *FMB* installDecor flags : -2139029248
12-01 22:33:42.409 15762-15762/com.mycompany.accelerometer D/SensorManager: registerListener :: 0, K2HH Acceleration , 200000, 0,
12-01 22:33:42.419 15762-15762/com.mycompany.accelerometer V/MediaPlayer-JNI: native_setup
12-01 22:33:42.419 15762-15762/com.mycompany.accelerometer V/MediaPlayer: constructor
12-01 22:33:42.419 15762-15762/com.mycompany.accelerometer V/MediaPlayer: setListener
12-01 22:33:42.419 15762-15762/com.mycompany.accelerometer E/MediaPlayer-JNI: QCMediaPlayer mediaplayer NOT present
12-01 22:33:42.419 15762-15762/com.mycompany.accelerometer V/MediaPlayer- JNI: setParameter: key 1400
12-01 22:33:42.419 15762-15762/com.mycompany.accelerometer V/MediaPlayer: MediaPlayer::setParameter(1400)
12-01 22:33:42.419 15762-15762/com.mycompany.accelerometer V/MediaPlayer-JNI: setAudioStreamType: 3
12-01 22:33:42.419 15762-15762/com.mycompany.accelerometer V/MediaPlayer: MediaPlayer::setAudioStreamType
12-01 22:33:42.419 15762-15762/com.mycompany.accelerometer V/MediaPlayer-JNI: set_session_id(): 44
12-01 22:33:42.419 15762-15762/com.mycompany.accelerometer V/MediaPlayer: MediaPlayer::setAudioSessionId(44)
12-01 22:33:42.419 15762-15762/com.mycompany.accelerometer V/MediaPlayer-JNI: setDataSourceFD: fd 28
12-01 22:33:42.419 15762-15762/com.mycompany.accelerometer V/MediaPlayer: setDataSource(28, 213976, 6161372)
12-01 22:33:42.429 15762-15774/com.mycompany.accelerometer V/MediaPlayer: message received msg=8, ext1=0, ext2=0
12-01 22:33:42.429 15762-15774/com.mycompany.accelerometer V/MediaPlayer: notify(8, 0, 0) callback on disconnected mediaplayer
12-01 22:33:42.449 15762-15762/com.mycompany.accelerometer V/MediaPlayer: setVideoSurfaceTexture
12-01 22:33:42.449 15762-15762/com.mycompany.accelerometer V/MediaPlayer: prepare
12-01 22:33:42.449 15762-15771/com.mycompany.accelerometer V/MediaPlayer: message received msg=200, ext1=973, ext2=0
12-01 22:33:42.449 15762-15771/com.mycompany.accelerometer W/MediaPlayer: info/warning (973, 0)
12-01 22:33:42.459 15762-15771/com.mycompany.accelerometer V/MediaPlayer: callback application
12-01 22:33:42.459 15762-15771/com.mycompany.accelerometer V/MediaPlayer: back from callback
12-01 22:33:42.459 15762-15771/com.mycompany.accelerometer V/MediaPlayer: message received msg=5, ext1=0, ext2=0
12-01 22:33:42.459 15762-15771/com.mycompany.accelerometer V/MediaPlayer: New video size 0 x 0
12-01 22:33:42.459 15762-15771/com.mycompany.accelerometer V/MediaPlayer: callback application
12-01 22:33:42.459 15762-15771/com.mycompany.accelerometer V/MediaPlayer: back from callback
12-01 22:33:42.459 15762-15771/com.mycompany.accelerometer V/MediaPlayer: message received msg=1, ext1=0, ext2=0
12-01 22:33:42.459 15762-15771/com.mycompany.accelerometer V/MediaPlayer: prepared
12-01 22:33:42.459 15762-15771/com.mycompany.accelerometer V/MediaPlayer: signal application thread
12-01 22:33:42.459 15762-15771/com.mycompany.accelerometer V/MediaPlayer: callback application
12-01 22:33:42.459 15762-15771/com.mycompany.accelerometer V/MediaPlayer: back from callback
12-01 22:33:42.459 15762-15762/com.mycompany.accelerometer V/MediaPlayer: prepare complete - status=0
12-01 22:33:42.459 15762-15762/com.mycompany.accelerometer E/MediaPlayer: Should have subtitle controller already set
12-01 22:33:42.509 15762-15762/com.mycompany.accelerometer D/ViewRootImpl: Buffer Count from app info with ::-1 && -1 for :: com.mycompany.accelerometer from View :: -1 DBQ Enabled ::false false
12-01 22:33:42.509 15762-15793/com.mycompany.accelerometer D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
12-01 22:33:42.509 15762-15762/com.mycompany.accelerometer I/MediaPlayer: Don't send intent. msg.arg1 = 0, msg.arg2 = 0
12-01 22:33:42.509 15762-15762/com.mycompany.accelerometer E/MediaPlayer: Should have subtitle controller already set
12-01 22:33:42.519 15762-15762/com.mycompany.accelerometer D/PhoneWindow: *FMB* isFloatingMenuEnabled mFloatingMenuBtn : null
12-01 22:33:42.519 15762-15762/com.mycompany.accelerometer D/PhoneWindow: *FMB* isFloatingMenuEnabled return false
12-01 22:33:42.539 15762-15793/com.mycompany.accelerometer I/Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: EGL 1.4 QUALCOMM build: (I716aebe4f9)
12-01 22:33:42.539 15762-15793/com.mycompany.accelerometer I/Adreno-EGL: OpenGL ES Shader Compiler Version: E031.25.03.04
12-01 22:33:42.539 15762-15793/com.mycompany.accelerometer I/Adreno-EGL: Build Date: 07/01/15 수
12-01 22:33:42.539 15762-15793/com.mycompany.accelerometer I/Adreno-EGL: Local Branch: AU_LINUX_ANDROID_LA.BR.1.1.3_RB1.05.01.00.032.031_02060873_02063264
12-01 22:33:42.539 15762-15793/com.mycompany.accelerometer I/Adreno-EGL: Remote Branch:
12-01 22:33:42.539 15762-15793/com.mycompany.accelerometer I/Adreno-EGL: Local Patches:
12-01 22:33:42.539 15762-15793/com.mycompany.accelerometer I/Adreno-EGL: Reconstruct Branch:
12-01 22:33:42.539 15762-15793/com.mycompany.accelerometer I/OpenGLRenderer: Initialized EGL, version 1.4
12-01 22:33:42.559 15762-15793/com.mycompany.accelerometer D/OpenGLRenderer: Get maximum texture size. GL_MAX_TEXTURE_SIZE is 4096
12-01 22:33:42.559 15762-15793/com.mycompany.accelerometer D/OpenGLRenderer: Enabling debug mode 0
12-01 22:33:42.629 15762-15762/com.mycompany.accelerometer I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@ca442fd time:887051
Upvotes: 1
Views: 949
Reputation: 682
Hi i am doing the same project ,may this code help you.
protected void sendSMS(Location location, boolean last) {
Geocoder geocoder = new Geocoder(mContext);
String addressText = "";
try {
List<Address> addresses = geocoder.getFromLocation(
location.getLatitude(), location.getLongitude(), 1);
if (addresses.size() > 0) {
Address a = addresses.get(0);
addressText = "Address: ";
for (int i = 0; i <= a.getMaxAddressLineIndex(); i++) {
addressText += a.getAddressLine(i) + " ";
}
}
} catch (Exception e) {
// unable to geocode
addressText = "";
}
String locationString;
if (location != null && !last) {
locationString = " New location: " + location.getLatitude()
+ ", " + location.getLongitude() + " ";
} else if (last) {
locationString = " Last known location: "
+ location.getLatitude() + ", "
+ location.getLongitude() + " ";
} else {
locationString = "Waiting for location";
}
SharedPreferences phoneNumbers = mContext.getSharedPreferences(
PREF_PHONE_NUMBERS, 0);
String currPhoneNumber;
for (int i = 0; !((currPhoneNumber = phoneNumbers.getString(
Integer.toString(i), "")).equals("")); i++) {
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendMultipartTextMessage(
currPhoneNumber,
null,
smsManager.divideMessage(message + locationString
+ addressText), null, null);
} catch (Exception e) {
e.printStackTrace();
}
}}
Thanks.
Upvotes: 1