Merge branch 'master' of http://nitta-lab-www.is.konan-u.ac.jp/gitbucket/git/nitta-lab-2019/CosmosClient into StoreLocationClass
commit f632681259d362ca3b94b6ba2adc3143ba70b550
2 parents 8314399 + 1eaad76
t-tai authored on 7 Nov 2019
Showing 6 changed files
View
13
app/src/main/AndroidManifest.xml
android:name=".views.GroupListActivity"
android:label="グループ一覧"
android:theme="@style/AppTheme.NoActionBar"></activity>
<service
android:name=".services.CosomosBackgroundService"
android:name=".services.CosmosBackgroundService"
android:exported="false"></service>
<!-- レシーバー登録-->
<receiver
android:name=".services.CosmosBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
 
 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.INTERNET" />
 
</manifest>
View
84
app/src/main/java/com/example/cosmosclient/app/Cosmos.java
package com.example.cosmosclient.app;
 
import android.app.Application;
import android.content.ComponentCallbacks;
import android.content.res.Configuration;
import android.util.Log;
 
import com.example.cosmosclient.entities.AreaInformation;
import com.example.cosmosclient.entities.Group;
import com.example.cosmosclient.entities.Location;
import android.content.SharedPreferences;
 
import java.util.HashMap;
 
import java.util.Collection;
import java.util.HashMap;
 
public class Cosmos extends Application {
private String token=null;
private Group curGroup=null;
private HashMap<String, Group> groups = new HashMap<>();
private String uId=null;
private HashMap<Integer, AreaInformation> areaInfo = new HashMap<>();
private String TAG = Cosmos.class.getSimpleName();
 
public Cosmos() {
super();
Log.d(TAG, " Constructor");
}
 
@Override
public void onCreate() {
Log.d(TAG, " onCreate");
super.onCreate();
}
 
@Override
public void onTerminate() {
Log.d(TAG, " onTerminate");
super.onTerminate();
}
 
@Override
public void onConfigurationChanged(Configuration newConfig) {
Log.d(TAG, " onConfigurationChanged");
super.onConfigurationChanged(newConfig);
}
 
@Override
public void onLowMemory() {
Log.d(TAG, " onLowMemory");
super.onLowMemory();
}
 
@Override
public void onTrimMemory(int level) {
Log.d(TAG, " onTrimMemory");
super.onTrimMemory(level);
}
 
@Override
public void registerComponentCallbacks(ComponentCallbacks callback) {
Log.d(TAG, " registerComponentCallbacks");
super.registerComponentCallbacks(callback);
}
 
@Override
public void unregisterComponentCallbacks(ComponentCallbacks callback) {
Log.d(TAG, " unregisterComponentCallbacks");
super.unregisterComponentCallbacks(callback);
}
 
@Override
public void registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) {
Log.d(TAG, " registerActivityLifecycleCallbacks");
super.registerActivityLifecycleCallbacks(callback);
}
 
@Override
public void unregisterActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) {
Log.d(TAG, " unregisterActivityLifecycleCallbacks");
super.unregisterActivityLifecycleCallbacks(callback);
}
 
@Override
public void registerOnProvideAssistDataListener(OnProvideAssistDataListener callback) {
Log.d(TAG, " registerOnProvideAssistDataListener");
super.registerOnProvideAssistDataListener(callback);
}
 
@Override
public void unregisterOnProvideAssistDataListener(OnProvideAssistDataListener callback) {
Log.d(TAG, " unregisterOnProvideAssistDataListener");
super.unregisterOnProvideAssistDataListener(callback);
}
 
//token処理
public void setToken(String token){
SharedPreferences prefData = getSharedPreferences("pref_data", MODE_PRIVATE);
public Group getGroup(String gId) {
return groups.get(gId);
}
 
public Collection<Group> getGroups() {
return groups.values();
}
 
//uId処理
public void setuId(String uId){
SharedPreferences prefData = getSharedPreferences("pref_data", MODE_PRIVATE);
SharedPreferences.Editor editor = prefData.edit();
View
349
app/src/main/java/com/example/cosmosclient/services/CosmosBackgroundService.java 0 → 100644
package com.example.cosmosclient.services;
 
import android.Manifest;
import android.app.IntentService;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.graphics.Color;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.util.Log;
 
import com.example.cosmosclient.R;
import com.example.cosmosclient.app.Cosmos;
import com.example.cosmosclient.entities.Group;
import com.example.cosmosclient.entities.GroupListResponse;
import com.example.cosmosclient.entities.RequestList;
import com.example.cosmosclient.entities.jsons.GroupJson;
import com.example.cosmosclient.resources.GroupsRest;
 
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.TimeZone;
import java.util.Timer;
import java.util.TimerTask;
 
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;
 
 
public class CosmosBackgroundService extends IntentService implements LocationListener {
private Context context;
private LocationManager locationManager;
private static final int MinTime = 1000;/*最小時間間隔*/
private static final float MinDistance = 1;/*最小距離間隔*/
private boolean isServiceRunning = false; //サービスが起動しているかを確認
private String TAG = CosmosBackgroundService.class.getSimpleName();
 
public CosmosBackgroundService() {
super("CosmosBackgroundService");
Log.d(TAG, "Constructor");
}
 
@Override
public void setIntentRedelivery(boolean enabled) {
Log.d(TAG, "setIntentRedelivery");
super.setIntentRedelivery(enabled);
}
 
@Override
public void onCreate() {
Log.d(TAG, "onCreate");
super.onCreate();
context = getApplicationContext();
// LocationManager インスタンス生成
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
}
 
@Override
public void onStart(@Nullable Intent intent, int startId) {
Log.d(TAG, "onStart");
super.onStart(intent, startId);
}
 
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand");
if(!isServiceRunning) {
int requestCode = 0;
String channelId = "default";
String title = context.getString(R.string.app_name);
PendingIntent pendingIntent =
PendingIntent.getActivity(context, requestCode,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
// ForegroundにするためNotificationが必要、Contextを設定
NotificationManager notificationManager =
(NotificationManager) context.
getSystemService(Context.NOTIFICATION_SERVICE);
// Notification Channel 設定
NotificationChannel channel = new NotificationChannel(
channelId, title, NotificationManager.IMPORTANCE_DEFAULT);
channel.setDescription("Silent Notification");
// 通知音を消さないと毎回通知音が出てしまう
// この辺りの設定はcleanにしてから変更
channel.setSound(null, null);
// 通知ランプを消す
channel.enableLights(false);
channel.setLightColor(Color.BLUE);
// 通知バイブレーション無し
channel.enableVibration(false);
if (notificationManager != null) {
notificationManager.createNotificationChannel(channel);
Notification notification = new Notification.Builder(context, channelId)
.setContentTitle(title)
// 本来なら衛星のアイコンですがandroid標準アイコンを設定
.setSmallIcon(android.R.drawable.btn_star)
.setContentText("GPS")
.setAutoCancel(true)
.setContentIntent(pendingIntent)
.setWhen(System.currentTimeMillis())
.build();
 
// startForeground
startForeground(1, notification);
}
 
startGPS();
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
startUpdateRequest();
}
};
//timer.scheduleAtFixedRate(定期的に実行したいタスク,初回のタスク実行までの時間(ms),実行するタスクの間隔(ms));
timer.scheduleAtFixedRate(task, 10000, 30000);
isServiceRunning = true;
}
 
return START_NOT_STICKY;
}
 
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onHandleIntent(Intent intent) {
Log.d(TAG, "onHandleIntent");
}
 
protected void startGPS() {
Log.d(TAG, "startGPS");
final boolean gpsEnabled
= locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
 
if (!gpsEnabled) {
// GPSを設定するように促す
enableLocationSettings();
}
 
if (locationManager != null) {
try {
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
return;
}
// Log.d(TAG, "requestLocationUpdates:");
 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
MinTime, MinDistance, this);
} catch (Exception e) {
// Log.d(TAG, "Exception:");
 
e.printStackTrace();
}
} else {
}
}
 
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy");
super.onDestroy();
}
 
@Override
public void onConfigurationChanged(Configuration newConfig) {
Log.d(TAG, "onConfigurationChanged");
super.onConfigurationChanged(newConfig);
}
 
@Override
public void onLowMemory() {
Log.d(TAG, "onLowMemory");
super.onLowMemory();
}
 
@Override
public void onTrimMemory(int level) {
Log.d(TAG, "onTrimMemory");
super.onTrimMemory(level);
}
 
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.d(TAG, "onBind");
return super.onBind(intent);
}
 
@Override
public boolean onUnbind(Intent intent) {
Log.d(TAG, "onUnbind");
return super.onUnbind(intent);
}
 
@Override
public void onRebind(Intent intent) {
Log.d(TAG, "onRebind");
super.onRebind(intent);
}
 
@Override
public void onTaskRemoved(Intent rootIntent) {
Log.d(TAG, "onTaskRemoved");
super.onTaskRemoved(rootIntent);
}
 
@Override
protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
Log.d(TAG, "dump");
super.dump(fd, writer, args);
}
 
@Override
public void onLocationChanged(Location location) {
// Log.d(TAG, "onLocationChanged");
Log.d(TAG, "lat:" + location.getLatitude());
Log.d(TAG, "lon:" + location.getLongitude());
 
}
 
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d(TAG, "onStatusChanged");
}
 
@Override
public void onProviderEnabled(String provider) {
Log.d(TAG, "onProviderEnabled");
}
 
@Override
public void onProviderDisabled(String provider) {
Log.d(TAG, "onProviderDisabled");
 
}
 
private void startUpdateRequest() {
final Cosmos app = (Cosmos) getApplication();
if(app.getuId() != null) {
final String uId, token;
uId = app.getuId();
token = app.getToken();
 
//retrofitの処理
final Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/")
.addConverterFactory(JacksonConverterFactory.create())
.build();
//interfaceから実装を取得
final GroupsRest getGroupsService = retrofit.create(GroupsRest.class);
final GroupsRest getRequestsService = retrofit.create(GroupsRest.class);
 
//API呼び出しのための値入力
final Call<GroupListResponse> call = getGroupsService.getGroups(uId, token);
 
//サーバからデータ受け取り
call.enqueue(new Callback<GroupListResponse>() {
//成功時
@Override
public void onResponse(Call<GroupListResponse> call, Response<GroupListResponse> response) {
if (response.isSuccessful()) {
final GroupListResponse groupListresult = response.body();
Log.d(TAG, "GroupListResponseグループ情報通信取得しました");
 
new Thread(new Runnable() {
public void run() {
for (GroupJson groupJson : groupListresult.getGroups()) {
app.setGroup(new Group(groupJson));
if (groupJson.getRequestHash() != app.getGroup(groupJson.getgId()).getRequestHash()) {
//RequestList取得するための必要な情報
final String gId = groupJson.getgId();
final boolean detail = true;
int quantity = 20;
 
final Call<RequestList> requestsListByGidCall = getRequestsService.getRequestsListByGid(gId, token, detail, quantity);
Response<RequestList> requestListResponse;
try {
requestListResponse = requestsListByGidCall.execute();
if (requestListResponse.isSuccessful()) {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Tokyo"));
RequestList requestList = requestListResponse.body();
app.getGroup(groupJson.getgId()).setRequestList(requestList);
app.getGroup(groupJson.getgId()).setRequestHash(groupJson.getRequestHash());
Log.d(TAG, groupJson.getName() + "のRequestListを取得しました");
} else {
// onFailure
try {
System.out.println(requestListResponse.errorBody().string());
} catch (IOException e) {
e.printStackTrace();
}
 
//onFailureでキャッチできないエラーの処理
Log.d(TAG, groupJson.getName() + "の通信エラー");
}
} catch (IOException e) {
e.printStackTrace();
Log.d(TAG, groupJson.getName() + "のRequestListの取得失敗しました");
}
}
}
}
}).start();
} else {
//onFailureでキャッチできないエラー用
Log.d(TAG, "GroupListResponseグループ情報通信エラー");
}
}
 
//失敗時
@Override
public void onFailure(Call<GroupListResponse> call, Throwable t) {
t.printStackTrace();
Log.d(TAG, "GroupListResponseグループ情報取得失敗");
}
});
} else {
Log.d(TAG, "app.getuId()がnull");
}
 
}
 
private void enableLocationSettings() {
Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
settingsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(settingsIntent);
}
 
}
View
56
app/src/main/java/com/example/cosmosclient/services/CosmosBootReceiver.java 0 → 100644
package com.example.cosmosclient.services;
 
import android.Manifest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v4.content.ContextCompat;
import android.util.Log;
 
public class CosmosBootReceiver extends BroadcastReceiver {
private static final int REQUEST_MULTI_PERMISSIONS = 101;
private String TAG = CosmosBootReceiver.class.getSimpleName();
 
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive");
// Android 6, API 23以上でペーミッションの確認
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction()) && Build.VERSION.SDK_INT >= 23) {
checkMultiPermissions(context);
} else{
// サービスの起動
startService(context);
}
}
 
// 位置情報許可の確認、外部ストレージのPermissionにも対応できるようにしておく
private void checkMultiPermissions(Context context){
// 位置情報の Permission
int permissionLocation = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION);
 
// 位置情報の Permission が許可されているか確認
if (permissionLocation == PackageManager.PERMISSION_GRANTED) {
// 許可済
startService(context);
} else{
// 未許可
}
}
 
//serviceをスタートさせる
private void startService(final Context context) {
final Thread thread = new Thread() {
@RequiresApi(api = Build.VERSION_CODES.O)
public void run() {
// サービスの起動
Intent intentservice = new Intent(context, CosmosBackgroundService.class);
context.startForegroundService(intentservice);
}
};
thread.start();
}
}
View
277
app/src/main/java/com/example/cosmosclient/services/CosomosBackgroundService.java 100644 → 0
package com.example.cosmosclient.services;
 
import android.Manifest;
import android.app.IntentService;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.util.Log;
 
import com.example.cosmosclient.R;
import com.example.cosmosclient.app.Cosmos;
import com.example.cosmosclient.entities.Group;
import com.example.cosmosclient.entities.GroupListResponse;
import com.example.cosmosclient.entities.RequestList;
import com.example.cosmosclient.entities.jsons.GroupJson;
import com.example.cosmosclient.resources.GroupsRest;
 
import java.io.IOException;
import java.util.TimeZone;
import java.util.Timer;
import java.util.TimerTask;
 
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;
 
 
public class CosomosBackgroundService extends IntentService implements LocationListener {
private Context context;
private LocationManager locationManager;
private static final int MinTime = 1000;/*最小時間間隔*/
private static final float MinDistance = 1;/*最小距離間隔*/
 
public CosomosBackgroundService() {
super("CosomosBackgroundService");
}
 
@Override
public void onCreate() {
super.onCreate();
// Log.d("debug", "onCreate");
context = getApplicationContext();
// LocationManager インスタンス生成
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
}
 
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
 
// Log.d("debug", "onStartCommand");
int requestCode = 0;
String channelId = "default";
String title = context.getString(R.string.app_name);
PendingIntent pendingIntent =
PendingIntent.getActivity(context, requestCode,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
// ForegroundにするためNotificationが必要、Contextを設定
NotificationManager notificationManager =
(NotificationManager) context.
getSystemService(Context.NOTIFICATION_SERVICE);
// Notification Channel 設定
NotificationChannel channel = new NotificationChannel(
channelId, title, NotificationManager.IMPORTANCE_DEFAULT);
channel.setDescription("Silent Notification");
// 通知音を消さないと毎回通知音が出てしまう
// この辺りの設定はcleanにしてから変更
channel.setSound(null, null);
// 通知ランプを消す
channel.enableLights(false);
channel.setLightColor(Color.BLUE);
// 通知バイブレーション無し
channel.enableVibration(false);
if (notificationManager != null) {
notificationManager.createNotificationChannel(channel);
Notification notification = new Notification.Builder(context, channelId)
.setContentTitle(title)
// 本来なら衛星のアイコンですがandroid標準アイコンを設定
.setSmallIcon(android.R.drawable.btn_star)
.setContentText("GPS")
.setAutoCancel(true)
.setContentIntent(pendingIntent)
.setWhen(System.currentTimeMillis())
.build();
 
// startForeground
startForeground(1, notification);
}
 
startGPS();
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
startUpdateRequest();
}
};
//timer.scheduleAtFixedRate(定期的に実行したいタスク,初回のタスク実行までの時間(ms),実行するタスクの間隔(ms));
timer.scheduleAtFixedRate(task, 10000, 300000);
 
return START_NOT_STICKY;
}
 
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onHandleIntent(Intent intent) {
// Log.d("debug", "onHandleIntent");
}
 
protected void startGPS() {
Log.d("debug", "startGPS");
final boolean gpsEnabled
= locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
 
if (!gpsEnabled) {
// GPSを設定するように促す
enableLocationSettings();
}
 
if (locationManager != null) {
try {
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
return;
}
// Log.d("debug", "requestLocationUpdates:");
 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
MinTime, MinDistance, this);
} catch (Exception e) {
// Log.d("debug", "Exception:");
 
e.printStackTrace();
}
} else {
}
}
 
@Override
public void onDestroy() {
// Log.d("debug", "onDestroy");
super.onDestroy();
}
 
@Override
public void onLocationChanged(Location location) {
// Log.d("debug", "onLocationChanged");
Log.d("debug", "lat:" + location.getLatitude());
Log.d("debug", "lon:" + location.getLongitude());
 
}
 
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
 
}
 
@Override
public void onProviderEnabled(String provider) {
 
}
 
@Override
public void onProviderDisabled(String provider) {
 
}
 
private void startUpdateRequest() {
final Cosmos app = (Cosmos) getApplication();
if(app.getuId() != null) {
final String uId, token;
uId = app.getuId();
token = app.getToken();
 
//retrofitの処理
final Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/")
.addConverterFactory(JacksonConverterFactory.create())
.build();
//interfaceから実装を取得
final GroupsRest getGroupsService = retrofit.create(GroupsRest.class);
final GroupsRest getRequestsService = retrofit.create(GroupsRest.class);
 
//API呼び出しのための値入力
final Call<GroupListResponse> call = getGroupsService.getGroups(uId, token);
 
//サーバからデータ受け取り
call.enqueue(new Callback<GroupListResponse>() {
//成功時
@Override
public void onResponse(Call<GroupListResponse> call, Response<GroupListResponse> response) {
if (response.isSuccessful()) {
final GroupListResponse groupListresult = response.body();
Log.d("debug", "GroupListResponseグループ情報通信取得しました");
 
new Thread(new Runnable() {
public void run() {
for (GroupJson groupJson : groupListresult.getGroups()) {
app.setGroup(new Group(groupJson));
if (groupJson.getRequestHash() != app.getGroup(groupJson.getgId()).getRequestHash()) {
//RequestList取得するための必要な情報
final String gId = groupJson.getgId();
final boolean detail = true;
int quantity = 20;
 
final Call<RequestList> requestsListByGidCall = getRequestsService.getRequestsListByGid(gId, token, detail, quantity);
Response<RequestList> requestListResponse;
try {
requestListResponse = requestsListByGidCall.execute();
if (requestListResponse.isSuccessful()) {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Tokyo"));
RequestList requestList = requestListResponse.body();
app.getGroup(groupJson.getgId()).setRequestList(requestList);
app.getGroup(groupJson.getgId()).setRequestHash(groupJson.getRequestHash());
Log.d("debug", groupJson.getName() + "のRequestListを取得しました");
} else {
// onFailure
try {
System.out.println(requestListResponse.errorBody().string());
} catch (IOException e) {
e.printStackTrace();
}
 
//onFailureでキャッチできないエラーの処理
Log.d("debug", groupJson.getName() + "の通信エラー");
}
} catch (IOException e) {
e.printStackTrace();
Log.d("debug", groupJson.getName() + "のRequestListの取得失敗しました");
}
}
}
}
}).start();
} else {
//onFailureでキャッチできないエラー用
Log.d("debug", "GroupListResponseグループ情報通信エラー");
}
}
 
//失敗時
@Override
public void onFailure(Call<GroupListResponse> call, Throwable t) {
t.printStackTrace();
Log.d("debug", "GroupListResponseグループ情報取得失敗");
}
});
} else {
Log.d("debug", "app.getuId()がnull");
}
 
}
 
private void enableLocationSettings() {
Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
settingsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(settingsIntent);
}
 
}
View
11
app/src/main/java/com/example/cosmosclient/views/SigninActivity.java
package com.example.cosmosclient.views;
 
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
import com.example.cosmosclient.MainActivity;
import com.example.cosmosclient.R;
import com.example.cosmosclient.app.Cosmos;
import com.example.cosmosclient.entities.AreaInformation;
import com.example.cosmosclient.entities.SigninResponse;
import com.example.cosmosclient.resources.UsersRest;
import com.example.cosmosclient.services.CosomosBackgroundService;
import com.example.cosmosclient.services.CosmosBackgroundService;
 
import java.util.ArrayList;
 
import retrofit2.Call;
private void startService() {
Thread thread = new Thread() {
@RequiresApi(api = Build.VERSION_CODES.O)
public void run() {
intentservice = new Intent(SigninActivity.this, CosomosBackgroundService.class);
intentservice = new Intent(SigninActivity.this, CosmosBackgroundService.class);
startForegroundService(intentservice);
 
}
};