From 15728740c52e12b8b835cbd4dcf016488b030045 Mon Sep 17 00:00:00 2001 From: SeungheeOh Date: Sat, 7 Sep 2019 12:18:21 +0900 Subject: [PATCH] 3rd commit - made basic skeleton --- app/src/main/AndroidManifest.xml | 15 +-- .../com/flywithu/carnav/AlarmReceiver.java | 21 ++++ .../com/flywithu/carnav/MainActivity.java | 114 +++++++----------- .../java/com/flywithu/carnav/RealService.java | 54 +++++++-- .../com/flywithu/carnav/RebootReceiver.java | 3 +- 5 files changed, 121 insertions(+), 86 deletions(-) create mode 100644 app/src/main/java/com/flywithu/carnav/AlarmReceiver.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 412ab32..da0dfc6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -34,21 +34,18 @@ + + + - - - - - - - diff --git a/app/src/main/java/com/flywithu/carnav/AlarmReceiver.java b/app/src/main/java/com/flywithu/carnav/AlarmReceiver.java new file mode 100644 index 0000000..bd91f22 --- /dev/null +++ b/app/src/main/java/com/flywithu/carnav/AlarmReceiver.java @@ -0,0 +1,21 @@ +package com.flywithu.carnav; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.os.Build; + +public class AlarmReceiver extends BroadcastReceiver{ + + @Override + public void onReceive(Context context, Intent intent) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + Intent in = new Intent(context, RestartService.class); + context.startForegroundService(in); + } else { + Intent in = new Intent(context, RealService.class); + context.startService(in); + } + } + +} diff --git a/app/src/main/java/com/flywithu/carnav/MainActivity.java b/app/src/main/java/com/flywithu/carnav/MainActivity.java index 14a9ec1..a13b099 100644 --- a/app/src/main/java/com/flywithu/carnav/MainActivity.java +++ b/app/src/main/java/com/flywithu/carnav/MainActivity.java @@ -1,5 +1,7 @@ package com.flywithu.carnav; +import androidx.appcompat.app.AppCompatActivity; + import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; @@ -8,35 +10,26 @@ import android.content.IntentFilter; import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbManager; import android.os.Bundle; -import android.widget.TextView; +import android.util.Log; import android.widget.Toast; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.app.NotificationManagerCompat; - import com.hoho.android.usbserial.driver.UsbSerialDriver; -import com.hoho.android.usbserial.driver.UsbSerialPort; import com.hoho.android.usbserial.driver.UsbSerialProber; import java.util.List; -import java.util.Set; public class MainActivity extends AppCompatActivity { - public static final String SERVICECMD = "com.android.music.musicservicecommand"; - public static final String TAG = "carnav"; - static final String ACTION_USB_PERMISSION = "com.flywithu.carnav.USB_PERMISSION"; private Intent serviceIntent; + public static final String SERVICECMD = "com.android.music.musicservicecommand"; + public static final String TAG="carnav"; + static final String ACTION_USB_PERMISSION = "com.flywithu.carnav.USB_PERMISSION"; private BroadcastReceiver usbReceiver = null; - - private void goService() { - - + private void goService() + { if (RealService.serviceIntent == null) { - serviceIntent = new Intent(this, RealService.class); startService(serviceIntent); - Toast.makeText(getApplicationContext(), "new start", Toast.LENGTH_LONG).show(); } else { serviceIntent = RealService.serviceIntent;//getInstance().getApplication(); Toast.makeText(getApplicationContext(), "already", Toast.LENGTH_LONG).show(); @@ -44,51 +37,23 @@ public class MainActivity extends AppCompatActivity { } - - private boolean isNotiPermissionAllowed() { - Set notiListenerSet = NotificationManagerCompat.getEnabledListenerPackages(this); - String myPackageName = getPackageName(); - - for (String packageName : notiListenerSet) { - if (packageName == null) { - continue; - } - if (packageName.equals(myPackageName)) { - return true; - } - } - - return false; - } - - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - boolean isPermissionAllowed = isNotiPermissionAllowed(); - - if (!isPermissionAllowed) { - Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"); - startActivity(intent); - } else { - ((TextView) findViewById(R.id.textViewNotificationStatus)).setText((isNotiPermissionAllowed()) ? "OK" : "NO"); - } - - - UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); List availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager); if (!availableDrivers.isEmpty()) { - Toast.makeText(getApplicationContext(), "USB Exist", Toast.LENGTH_LONG).show(); + Toast.makeText(getApplicationContext(),"USB Exist",Toast.LENGTH_LONG).show(); UsbSerialDriver driver = null; UsbDeviceConnection connection = null; try { driver = availableDrivers.get(0); - if (!manager.hasPermission(driver.getDevice())) { + if(!manager.hasPermission(driver.getDevice())) + { Toast.makeText(getApplicationContext(), "NO Permission", Toast.LENGTH_LONG).show(); //Request USB HOST @@ -100,53 +65,66 @@ public class MainActivity extends AppCompatActivity { new Intent(ACTION_USB_PERMISSION), PendingIntent.FLAG_ONE_SHOT); // - usbReceiver = new BroadcastReceiver() { + usbReceiver=new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); - if (ACTION_USB_PERMISSION.equals(action)) { + if(ACTION_USB_PERMISSION.equals(action)) + { - if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, true)) { - Toast.makeText(getApplicationContext(), "Pemission Granted", Toast.LENGTH_LONG).show(); + if(intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED,true)) + { + Toast.makeText(getApplicationContext(), "Pemission Granted", Toast.LENGTH_LONG); goService(); - } else { - Toast.makeText(getApplicationContext(), "Pemission Denied", Toast.LENGTH_LONG).show(); + } + else + { + Toast.makeText(getApplicationContext(), "Pemission Denied", Toast.LENGTH_LONG); } } } }; + + registerReceiver(usbReceiver, new IntentFilter(ACTION_USB_PERMISSION)); manager.requestPermission(driver.getDevice(), mPermissionIntent); } - } else { - Toast.makeText(getApplicationContext(), "Has Permission", Toast.LENGTH_LONG).show(); + + } + else { connection = manager.openDevice(driver.getDevice()); if (connection == null) { - Toast.makeText(getApplicationContext(), "Unknown error", Toast.LENGTH_LONG).show(); + Toast.makeText(getApplicationContext(), "Unknown error", Toast.LENGTH_LONG); } else { - UsbSerialPort sPort = null; - sPort = driver.getPorts().get(0); - sPort.open(connection); - Toast.makeText(getApplicationContext(), "Serial Count:" + driver.getPorts().size(), Toast.LENGTH_LONG).show(); - - sPort.close(); goService(); } } - } catch (Exception e) { - Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); } - } else { - Toast.makeText(getApplicationContext(), "NO USB", Toast.LENGTH_LONG).show(); + catch(Exception e) + { + e.toString(); + } + + } + else + { + Toast.makeText(getApplicationContext(),"NO USB",Toast.LENGTH_LONG).show(); + } + + + + + } + @Override protected void onDestroy() { super.onDestroy(); @@ -154,9 +132,9 @@ public class MainActivity extends AppCompatActivity { stopService(serviceIntent); serviceIntent = null; } - if (usbReceiver != null) { + if(usbReceiver!=null) + { unregisterReceiver(usbReceiver); - } - } + }} } diff --git a/app/src/main/java/com/flywithu/carnav/RealService.java b/app/src/main/java/com/flywithu/carnav/RealService.java index 5e9e7ff..894d9f8 100644 --- a/app/src/main/java/com/flywithu/carnav/RealService.java +++ b/app/src/main/java/com/flywithu/carnav/RealService.java @@ -16,6 +16,7 @@ import android.hardware.usb.UsbManager; import android.media.RingtoneManager; import android.net.Uri; import android.os.Build; +import android.os.Bundle; import android.os.Handler; import android.os.IBinder; @@ -41,6 +42,7 @@ public class RealService extends Service { private static UsbSerialPort sPort = null; + public RealService() { } @@ -102,14 +104,16 @@ feff0041c9c0c5b4bc18005a connection = manager.openDevice(driver.getDevice()); if (connection == null) { showToast(getApplication(), "No connection"); - // You probably need to call UsbManager.requestPermission(driver.getDevice(), ..) - return START_NOT_STICKY; + return START_NOT_STICKY; + } + sPort = driver.getPorts().get(0); } catch (Exception e) { showToast(getApplication(), e.toString()); } try { + sPort.open(connection); sPort.setParameters(19200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE); @@ -188,7 +192,10 @@ feff0041c9c0c5b4bc18005a iF.addAction("com.rdio.android.metachanged"); iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged"); iF.addAction("com.andrew.apollo.metachanged"); - + iF.addAction("com.android.music.metachanged"); + iF.addAction("com.android.music.playstatechanged"); + iF.addAction("com.android.music.playbackcomplete"); + iF.addAction("com.android.music.queuechanged"); registerReceiver(mReceiver, iF); return START_NOT_STICKY; } @@ -205,7 +212,7 @@ feff0041c9c0c5b4bc18005a serviceIntent = null; setAlarmTimer(); Thread.currentThread().interrupt(); - + unregisterReceiver(mReceiver); // if (mainThread != null) { // mainThread.interrupt(); // mainThread = null; @@ -241,7 +248,7 @@ feff0041c9c0c5b4bc18005a final Calendar c = Calendar.getInstance(); c.setTimeInMillis(System.currentTimeMillis()); c.add(Calendar.SECOND, 1); - Intent intent = new Intent(this, AlarmRecever.class); + Intent intent = new Intent(this, AlarmReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0); AlarmManager mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); @@ -260,13 +267,46 @@ feff0041c9c0c5b4bc18005a } catch (Exception e) { e.toString(); } + + Bundle bundle = intent.getExtras(); + if (bundle != null) { + for (String key : bundle.keySet()) { + Object value = bundle.get(key); + Log.d("MUSIC", String.format("%s %s (%s)", key, + value.toString(), value.getClass().getName())); + } + } + + /* + 2019-09-07 11:47:50.244 7675-7675/com.flywithu.carnav D/MUSIC: artist 알 수 없음 (java.lang.String) +2019-09-07 11:47:50.244 7675-7675/com.flywithu.carnav D/MUSIC: albumId 11 (java.lang.Long) +2019-09-07 11:47:50.244 7675-7675/com.flywithu.carnav D/MUSIC: playing true (java.lang.Boolean) +2019-09-07 11:47:50.245 7675-7675/com.flywithu.carnav D/MUSIC: id 50 (java.lang.String) +2019-09-07 11:47:50.245 7675-7675/com.flywithu.carnav D/MUSIC: album Download (java.lang.String) +2019-09-07 11:47:50.245 7675-7675/com.flywithu.carnav D/MUSIC: track I understand (2) (java.lang.String) +2019-09-07 11:47:50.245 7675-7675/com.flywithu.carnav D/MUSIC: vi_direction 2 (java.lang.Long) +2019-09-07 11:47:50.245 7675-7675/com.flywithu.carnav D/MUSIC: listPosition 2 (java.lang.Long) +2019-09-07 11:47:50.245 7675-7675/com.flywithu.carnav D/MUSIC: mediaCount 2 (java.lang.Long) + + + 2019-09-07 11:50:45.186 7675-7675/com.flywithu.carnav D/MUSIC: duration 60000 (java.lang.Long) +2019-09-07 11:50:45.186 7675-7675/com.flywithu.carnav D/MUSIC: playstate true (java.lang.Boolean) +2019-09-07 11:50:45.187 7675-7675/com.flywithu.carnav D/MUSIC: artist 거미 (java.lang.String) +2019-09-07 11:50:45.187 7675-7675/com.flywithu.carnav D/MUSIC: albumId 10314289 (java.lang.String) +2019-09-07 11:50:45.188 7675-7675/com.flywithu.carnav D/MUSIC: playing true (java.lang.Boolean) +2019-09-07 11:50:45.188 7675-7675/com.flywithu.carnav D/MUSIC: id 1 (java.lang.Long) +2019-09-07 11:50:45.189 7675-7675/com.flywithu.carnav D/MUSIC: album 호텔 델루나 OST Part.7 (java.lang.String) +2019-09-07 11:50:45.189 7675-7675/com.flywithu.carnav D/MUSIC: track 기억해줘요 내 모든 날과 그때를 - 거미 (java.lang.String) +2019-09-07 11:50:45.189 7675-7675/com.flywithu.carnav V/tag: com.android.music.metachanged / null +2019-09-07 11:50:45.189 7675-7675/com.flywithu.carnav V/MUSIC: 거미:호텔 델루나 OST Part.7:기억해줘요 내 모든 날과 그때를 - 거미 + */ String action = intent.getAction(); String cmd = intent.getStringExtra("command"); - Log.v("tag ", action + " / " + cmd); + Log.v("MUSIC ", action + " / " + cmd); String artist = intent.getStringExtra("artist"); String album = intent.getStringExtra("album"); String track = intent.getStringExtra("track"); - Log.v("tag", artist + ":" + album + ":" + track); + Log.v("MUSIC", artist + ":" + album + ":" + track); // Toast.makeText(MainActivity.this, track, Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/com/flywithu/carnav/RebootReceiver.java b/app/src/main/java/com/flywithu/carnav/RebootReceiver.java index e4749e8..74dc577 100644 --- a/app/src/main/java/com/flywithu/carnav/RebootReceiver.java +++ b/app/src/main/java/com/flywithu/carnav/RebootReceiver.java @@ -8,9 +8,8 @@ import android.os.Build; public class RebootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - Intent in = new Intent(context, RealService.class); + Intent in = new Intent(context, RestartService.class); context.startForegroundService(in); } else { Intent in = new Intent(context, RealService.class);