diff --git a/app/src/main/java/org/ntlab/amaryllis/client/Amaryllis.java b/app/src/main/java/org/ntlab/amaryllis/client/Amaryllis.java index b12f62f..39700eb 100644 --- a/app/src/main/java/org/ntlab/amaryllis/client/Amaryllis.java +++ b/app/src/main/java/org/ntlab/amaryllis/client/Amaryllis.java @@ -7,7 +7,9 @@ private String token = null; private String uid = null; private String password=null; - + private String latitude=null; + private String longitude=null; + public void setUid(String uid) { SharedPreferences prefData = getSharedPreferences("pref_data", MODE_PRIVATE); SharedPreferences.Editor editor = prefData.edit(); @@ -52,4 +54,29 @@ return token; } + public void setLatitude(String latitude) { + SharedPreferences prefData = getSharedPreferences("pref_data", MODE_PRIVATE); + SharedPreferences.Editor editor = prefData.edit(); + editor.putString("latitude", latitude); + editor.commit(); + } + public String getLatitude() { + SharedPreferences prefData = getSharedPreferences("pref_data", MODE_PRIVATE); + latitude = prefData.getString("latitude",""); + return latitude; + } + + public void setLongitude(String longitude) { + SharedPreferences prefData = getSharedPreferences("pref_data", MODE_PRIVATE); + SharedPreferences.Editor editor = prefData.edit(); + editor.putString("longitude", longitude); + editor.commit(); + } + + public String getLongitude() { + SharedPreferences prefData = getSharedPreferences("pref_data", MODE_PRIVATE); + longitude = prefData.getString("longitude","" ); + return longitude; + } + } diff --git a/app/src/main/java/org/ntlab/amaryllis/client/MainActivity.java b/app/src/main/java/org/ntlab/amaryllis/client/MainActivity.java index c6e59b7..da91779 100644 --- a/app/src/main/java/org/ntlab/amaryllis/client/MainActivity.java +++ b/app/src/main/java/org/ntlab/amaryllis/client/MainActivity.java @@ -1,17 +1,45 @@ package org.ntlab.amaryllis.client; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; import androidx.navigation.NavController; import androidx.navigation.Navigation; import androidx.navigation.ui.AppBarConfiguration; import androidx.navigation.ui.NavigationUI; +import android.Manifest; +import android.app.Notification; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; +import android.location.LocationProvider; import android.os.Bundle; +import android.os.Debug; +import android.provider.Settings; +import android.util.Log; +import android.widget.Toast; import com.google.android.material.bottomnavigation.BottomNavigationView; +import org.ntlab.amaryllis.client.fragment.MapsFragment; +import org.ntlab.amaryllis.client.resources.AccountsRest; -public class MainActivity extends AppCompatActivity { +import java.util.ArrayList; + +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + + +public class MainActivity extends AppCompatActivity implements LocationListener{ + + private static final String TAG = MainActivity.class.getSimpleName() ; + LocationManager locationManager; + private ArrayList listeners = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -25,5 +53,130 @@ NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration); NavigationUI.setupWithNavController(navView, navController); + + if (ContextCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) != + PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, + 1000); + } + else{ + locationStart(); + locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 50, this); + + + } + } + + private void locationStart(){ + Log.d("debug","locationStart()"); + + // LocationManager インスタンス生成 + locationManager = + (LocationManager) getSystemService(LOCATION_SERVICE); + + if (locationManager != null && locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { + Log.d("debug", "location manager Enabled"); + } else { + // GPSを設定するように促す + Intent settingsIntent = + new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); + startActivity(settingsIntent); + Log.d("debug", "not gpsEnable, startActivity"); + } + + if (ContextCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) != + PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000); + + Log.d("debug", "checkSelfPermission false"); + return; + } + + // locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 50, this); + + } + + // 結果の受け取り + /** + * Android Quickstart: + * https://developers.google.com/sheets/api/quickstart/android + * + * Respond to requests for permissions at runtime for API 23 and above. + * @param requestCode The request code passed in + * requestPermissions(android.app.Activity, String, int, String[]) + * @param permissions The requested permissions. Never null. + * @param grantResults The grant results for the corresponding permissions + * which is either PERMISSION_GRANTED or PERMISSION_DENIED. Never null. + */ + @Override + public void onRequestPermissionsResult( + int requestCode, @NonNull String[]permissions, @NonNull int[] grantResults) { + if (requestCode == 1000) { + // 使用が許可された + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Log.d("debug","checkSelfPermission true"); + + locationStart(); + + } else { + // それでも拒否された時の対応 + Toast toast = Toast.makeText(this, + "これ以上なにもできません", Toast.LENGTH_SHORT); + toast.show(); + } + } + } + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { +// API 29以降非推奨 + +// switch (status) { +// case LocationProvider.AVAILABLE: +// Log.d("debug", "LocationProvider.AVAILABLE"); +// break; +// case LocationProvider.OUT_OF_SERVICE: +// Log.d("debug", "LocationProvider.OUT_OF_SERVICE"); +// break; +// case LocationProvider.TEMPORARILY_UNAVAILABLE: +// Log.d("debug", "LocationProvider.TEMPORARILY_UNAVAILABLE"); +// break; +// } + + } + public void subscribe(LocationListener listener){ + listeners.add(listener); + } + @Override + public void onLocationChanged(Location location) { +// Amaryllis amaryllis = (Amaryllis) getApplication(); +// String latitude = String.valueOf(location.getLatitude()); +// String longitude = String.valueOf(location.getLongitude()); +// amaryllis.setLatitude(latitude); +// amaryllis.setLongitude(longitude); + + Log.d(TAG, "lat:" + location.getLatitude()); + Log.d(TAG, "lon:" + location.getLongitude()); + Log.d("debug", "locationChanged" ); + for(LocationListener listener: listeners){ + listener.onLocationChanged(location); + } + + } + @Override + public void onProviderEnabled(String provider) { + + } + + @Override + public void onProviderDisabled(String provider) { + + } + + } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/amaryllis/client/MapsActivity.java b/app/src/main/java/org/ntlab/amaryllis/client/MapsActivity.java index fb6e2ab..6b68956 100644 --- a/app/src/main/java/org/ntlab/amaryllis/client/MapsActivity.java +++ b/app/src/main/java/org/ntlab/amaryllis/client/MapsActivity.java @@ -1,5 +1,6 @@ package org.ntlab.amaryllis.client; +import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentActivity; import android.os.Bundle; @@ -11,7 +12,7 @@ import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; -public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { +public class MapsActivity extends AppCompatActivity { private GoogleMap mMap; @@ -19,10 +20,7 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); - // Obtain the SupportMapFragment and get notified when the map is ready to be used. - SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() - .findFragmentById(R.id.map); - mapFragment.getMapAsync(this); + } /** @@ -34,13 +32,5 @@ * it inside the SupportMapFragment. This method will only be triggered once the user has * installed Google Play services and returned to the app. */ - @Override - public void onMapReady(GoogleMap googleMap) { - mMap = googleMap; - // Add a marker in Sydney and move the camera - LatLng sydney = new LatLng(-34, 151); - mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); - mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); - } } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/amaryllis/client/fragment/MapsFragment.java b/app/src/main/java/org/ntlab/amaryllis/client/fragment/MapsFragment.java index a2fcea4..6e00703 100644 --- a/app/src/main/java/org/ntlab/amaryllis/client/fragment/MapsFragment.java +++ b/app/src/main/java/org/ntlab/amaryllis/client/fragment/MapsFragment.java @@ -4,7 +4,13 @@ import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import android.app.Application; +import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.os.Bundle; @@ -29,6 +35,7 @@ import com.google.android.gms.maps.model.MarkerOptions; import org.ntlab.amaryllis.client.Amaryllis; +import org.ntlab.amaryllis.client.MainActivity; import org.ntlab.amaryllis.client.R; import org.ntlab.amaryllis.client.VoiceActivity; import org.ntlab.amaryllis.client.entities.SignUpJson; @@ -45,7 +52,11 @@ import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; -public class MapsFragment extends Fragment { + +import static android.content.Context.LOCATION_SERVICE; +import static android.content.Context.MODE_PRIVATE; + +public class MapsFragment extends Fragment implements LocationListener { private MediaRecorder mr; @@ -61,14 +72,19 @@ static final String filePath = Environment.getExternalStorageDirectory() + "/sample.3gp"; Button RecordButton; Button PlaybackButton; + private double latitude,longitude; +// double latitude,longitude; private byte[] byteData = new byte[4096]; - private short[] shortData = new short[2048]; + //private short[] shortData = new short[2048]; private int bufSize; + LocationManager locationManager; +// public final Application getApplication() { +// throw new RuntimeException("Stub!"); +// } private OnMapReadyCallback callback = new OnMapReadyCallback() { - /** * Manipulates the map once available. * This callback is triggered when the map is ready to be used. @@ -78,21 +94,29 @@ * install it inside the SupportMapFragment. This method will only be triggered once the * user has installed Google Play services and returned to the app. */ + @Override - public void onMapReady(GoogleMap googleMap) { - LatLng sydney = new LatLng(-34, 151); + public void onMapReady(GoogleMap googleMap){ +// amaryllis =(Amaryllis)getApplication(); +// String latitude = amaryllis.getLatitude(); +// String longitude = amaryllis.getLongitude(); +// double latitude1 = Double.parseDouble(latitude); +// double longitude1 = Double.parseDouble(longitude); + LatLng sydney = new LatLng(35, 135); googleMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); + } }; + private VoicememosRest voicememosService; private Amaryllis amaryllis; - @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_maps, container, false); } @@ -107,7 +131,7 @@ .addConverterFactory(JacksonConverterFactory.create()) .build(); voicememosService = retrofit.create(VoicememosRest.class); - amaryllis = (Amaryllis) getActivity().getApplication(); +// amaryllis = (Amaryllis) getActivity().getApplication(); //file = new File(getFilesDir(),"Sample.3gp"); mp = new MediaPlayer(); @@ -135,6 +159,27 @@ } } + @Override + public void onLocationChanged(Location location) { + latitude=location.getLatitude(); + longitude=location.getLongitude(); + } + + @Override + public void onStatusChanged(String s, int i, Bundle bundle) { + + } + + @Override + public void onProviderEnabled(String s) { + + } + + @Override + public void onProviderDisabled(String s) { + + } + public class FragmentTest extends Fragment implements View.OnClickListener { @@ -174,7 +219,6 @@ mr.release(); in.read(byteData); - byte2short(shortData, byteData); String data = Base64.encodeToString(byteData, 0,byteData.length, Base64.DEFAULT); @@ -334,13 +378,4 @@ return timeLabel; } - - private void byte2short(short data[], byte bdata[]){ - int i; - for(i = 0; i < bdata.length / 2; i++){ - // リトルエンディアン - data[i] = (short) ((short) bdata[2 * i] + (short) bdata[2 * i + 1] * 256); - } - } - } \ No newline at end of file diff --git a/build.gradle b/build.gradle index 92a0c3b..b58dc04 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:4.0.0' + classpath 'com.android.tools.build:gradle:4.0.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files