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.support.annotation.RequiresApi; import android.support.v4.app.ActivityCompat; import android.util.Log; import com.example.cosmosclient.R; public class CosomosBackgroundService extends IntentService implements LocationListener { private Context context; private LocationManager locationManager; 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"); // Thread thread = new Thread() { // public void run() { // int count = 10; // // try { // for(int i=0 ; i< count ; i++) { // Thread.sleep(1000); // // Log.d("debug", "sleep: " + String.valueOf(i)); // } // // } catch (InterruptedException e) { // Thread.currentThread().interrupt(); // } // } // }; // thread.start(); 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(); return super.onStartCommand(intent,flags,startId); } @Override protected void onHandleIntent(Intent intent) { Log.d("debug", "onHandleIntent"); int count = 10; try { for(int i=0 ; i< count ; i++) { Thread.sleep(1000); Log.d("debug", "sleep: " + String.valueOf(i)); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } // protected void startGPS() { // StringBuilder strBuf = new StringBuilder(); // strBuf.append("startGPS\n"); // // 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; // } // // locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, // MinTime, MinDistance, this); // } catch (Exception e) { // e.printStackTrace(); // } // } else { // strBuf.append("locationManager=null\n"); // } // } @Override public void onDestroy() { Log.d("debug", "onDestroy"); super.onDestroy(); } @Override public void onLocationChanged(Location location) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } }