From 31b0eea4e27f865f0a0a558268f84a17d95be76f 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 | 25 +++- .../{AlarmRecever.java => AlarmReceiver.java} | 42 +++---- .../com/flywithu/carnav/MainActivity.java | 111 ++++++++++++++++-- .../java/com/flywithu/carnav/RealService.java | 54 +++++++-- ...RebootRecever.java => RebootReceiver.java} | 36 +++--- 5 files changed, 211 insertions(+), 57 deletions(-) rename app/src/main/java/com/flywithu/carnav/{AlarmRecever.java => AlarmReceiver.java} (88%) rename app/src/main/java/com/flywithu/carnav/{RebootRecever.java => RebootReceiver.java} (88%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cd1ada5..da0dfc6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,11 @@ + + + + + + + + + + + + + + + + + + - - - - \ No newline at end of file diff --git a/app/src/main/java/com/flywithu/carnav/AlarmRecever.java b/app/src/main/java/com/flywithu/carnav/AlarmReceiver.java similarity index 88% rename from app/src/main/java/com/flywithu/carnav/AlarmRecever.java rename to app/src/main/java/com/flywithu/carnav/AlarmReceiver.java index bb9a0ec..bd91f22 100644 --- a/app/src/main/java/com/flywithu/carnav/AlarmRecever.java +++ b/app/src/main/java/com/flywithu/carnav/AlarmReceiver.java @@ -1,21 +1,21 @@ -package com.flywithu.carnav; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.os.Build; - -public class AlarmRecever 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); - } - } - -} +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 9927870..a13b099 100644 --- a/app/src/main/java/com/flywithu/carnav/MainActivity.java +++ b/app/src/main/java/com/flywithu/carnav/MainActivity.java @@ -2,25 +2,32 @@ package com.flywithu.carnav; import androidx.appcompat.app.AppCompatActivity; +import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.hardware.usb.UsbDeviceConnection; +import android.hardware.usb.UsbManager; import android.os.Bundle; import android.util.Log; import android.widget.Toast; +import com.hoho.android.usbserial.driver.UsbSerialDriver; +import com.hoho.android.usbserial.driver.UsbSerialProber; + +import java.util.List; + public class MainActivity extends AppCompatActivity { private Intent serviceIntent; public static final String SERVICECMD = "com.android.music.musicservicecommand"; public static final String TAG="carnav"; - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - if (RealService.serviceIntent==null) { + static final String ACTION_USB_PERMISSION = "com.flywithu.carnav.USB_PERMISSION"; + private BroadcastReceiver usbReceiver = null; + private void goService() + { + if (RealService.serviceIntent == null) { serviceIntent = new Intent(this, RealService.class); startService(serviceIntent); } else { @@ -28,9 +35,96 @@ public class MainActivity extends AppCompatActivity { Toast.makeText(getApplicationContext(), "already", Toast.LENGTH_LONG).show(); } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + + 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(); + + UsbSerialDriver driver = null; + UsbDeviceConnection connection = null; + try { + driver = availableDrivers.get(0); + if(!manager.hasPermission(driver.getDevice())) + { + + Toast.makeText(getApplicationContext(), "NO Permission", Toast.LENGTH_LONG).show(); + //Request USB HOST + // You probably need to call UsbManager.requestPermission(driver.getDevice(), ..) + if (!manager.hasPermission(driver.getDevice())) { + + PendingIntent mPermissionIntent; + mPermissionIntent = PendingIntent.getBroadcast(MainActivity.this, 0, + new Intent(ACTION_USB_PERMISSION), PendingIntent.FLAG_ONE_SHOT); +// + + usbReceiver=new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if(ACTION_USB_PERMISSION.equals(action)) + { + + 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); + } + } + + } + }; + + + + registerReceiver(usbReceiver, new IntentFilter(ACTION_USB_PERMISSION)); + manager.requestPermission(driver.getDevice(), mPermissionIntent); + + + } + + } + else { + connection = manager.openDevice(driver.getDevice()); + if (connection == null) { + Toast.makeText(getApplicationContext(), "Unknown error", Toast.LENGTH_LONG); + } else { + + goService(); + } + } + } + catch(Exception e) + { + e.toString(); + } + + + } + else + { + Toast.makeText(getApplicationContext(),"NO USB",Toast.LENGTH_LONG).show(); + } + + + + } + + @Override protected void onDestroy() { super.onDestroy(); @@ -38,6 +132,9 @@ public class MainActivity extends AppCompatActivity { stopService(serviceIntent); serviceIntent = 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/RebootRecever.java b/app/src/main/java/com/flywithu/carnav/RebootReceiver.java similarity index 88% rename from app/src/main/java/com/flywithu/carnav/RebootRecever.java rename to app/src/main/java/com/flywithu/carnav/RebootReceiver.java index 63f3533..74dc577 100644 --- a/app/src/main/java/com/flywithu/carnav/RebootRecever.java +++ b/app/src/main/java/com/flywithu/carnav/RebootReceiver.java @@ -1,19 +1,19 @@ -package com.flywithu.carnav; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.os.Build; - -public class RebootRecever 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); - } - } +package com.flywithu.carnav; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +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, RestartService.class); + context.startForegroundService(in); + } else { + Intent in = new Intent(context, RealService.class); + context.startService(in); + } + } } \ No newline at end of file