3rd commit - made basic skeleton

This commit is contained in:
SeungheeOh 2019-09-07 12:18:21 +09:00
parent 3d2fe9eb5a
commit 31b0eea4e2
5 changed files with 211 additions and 57 deletions

View File

@ -2,6 +2,11 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.flywithu.carnav" package="com.flywithu.carnav"
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-feature android:name="android.hardware.usb.host" />
<application <application
android:allowBackup="true" android:allowBackup="true"
@ -27,12 +32,24 @@
android:resource="@xml/device_filter" /> android:resource="@xml/device_filter" />
</service> </service>
<service
android:name=".RestartService"
android:enabled="true"
android:exported="true" />
<receiver android:name=".AlarmReceiver"/>
<receiver android:name=".RebootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application> </application>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-sdk tools:overrideLibrary="com.hoho.android.usbserial"/> <uses-sdk tools:overrideLibrary="com.hoho.android.usbserial"/>
</manifest> </manifest>

View File

@ -5,7 +5,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Build; import android.os.Build;
public class AlarmRecever extends BroadcastReceiver{ public class AlarmReceiver extends BroadcastReceiver{
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {

View File

@ -2,24 +2,31 @@ package com.flywithu.carnav;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbManager;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.widget.Toast; 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 { public class MainActivity extends AppCompatActivity {
private Intent serviceIntent; private Intent serviceIntent;
public static final String SERVICECMD = "com.android.music.musicservicecommand"; public static final String SERVICECMD = "com.android.music.musicservicecommand";
public static final String TAG="carnav"; public static final String TAG="carnav";
@Override static final String ACTION_USB_PERMISSION = "com.flywithu.carnav.USB_PERMISSION";
protected void onCreate(Bundle savedInstanceState) { private BroadcastReceiver usbReceiver = null;
super.onCreate(savedInstanceState); private void goService()
setContentView(R.layout.activity_main); {
if (RealService.serviceIntent == null) { if (RealService.serviceIntent == null) {
serviceIntent = new Intent(this, RealService.class); serviceIntent = new Intent(this, RealService.class);
startService(serviceIntent); startService(serviceIntent);
@ -28,8 +35,95 @@ public class MainActivity extends AppCompatActivity {
Toast.makeText(getApplicationContext(), "already", Toast.LENGTH_LONG).show(); 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<UsbSerialDriver> 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 @Override
protected void onDestroy() { protected void onDestroy() {
@ -38,6 +132,9 @@ public class MainActivity extends AppCompatActivity {
stopService(serviceIntent); stopService(serviceIntent);
serviceIntent = null; serviceIntent = null;
} }
} if(usbReceiver!=null)
{
unregisterReceiver(usbReceiver);
}}
} }

View File

@ -16,6 +16,7 @@ import android.hardware.usb.UsbManager;
import android.media.RingtoneManager; import android.media.RingtoneManager;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
@ -41,6 +42,7 @@ public class RealService extends Service {
private static UsbSerialPort sPort = null; private static UsbSerialPort sPort = null;
public RealService() { public RealService() {
} }
@ -102,14 +104,16 @@ feff0041c9c0c5b4bc18005a
connection = manager.openDevice(driver.getDevice()); connection = manager.openDevice(driver.getDevice());
if (connection == null) { if (connection == null) {
showToast(getApplication(), "No connection"); 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) { } catch (Exception e) {
showToast(getApplication(), e.toString()); showToast(getApplication(), e.toString());
} }
try { try {
sPort.open(connection); sPort.open(connection);
sPort.setParameters(19200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE); sPort.setParameters(19200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);
@ -188,7 +192,10 @@ feff0041c9c0c5b4bc18005a
iF.addAction("com.rdio.android.metachanged"); iF.addAction("com.rdio.android.metachanged");
iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged"); iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged");
iF.addAction("com.andrew.apollo.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); registerReceiver(mReceiver, iF);
return START_NOT_STICKY; return START_NOT_STICKY;
} }
@ -205,7 +212,7 @@ feff0041c9c0c5b4bc18005a
serviceIntent = null; serviceIntent = null;
setAlarmTimer(); setAlarmTimer();
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
unregisterReceiver(mReceiver);
// if (mainThread != null) { // if (mainThread != null) {
// mainThread.interrupt(); // mainThread.interrupt();
// mainThread = null; // mainThread = null;
@ -241,7 +248,7 @@ feff0041c9c0c5b4bc18005a
final Calendar c = Calendar.getInstance(); final Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis()); c.setTimeInMillis(System.currentTimeMillis());
c.add(Calendar.SECOND, 1); 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); PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); AlarmManager mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
@ -260,13 +267,46 @@ feff0041c9c0c5b4bc18005a
} catch (Exception e) { } catch (Exception e) {
e.toString(); 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 action = intent.getAction();
String cmd = intent.getStringExtra("command"); String cmd = intent.getStringExtra("command");
Log.v("tag ", action + " / " + cmd); Log.v("MUSIC ", action + " / " + cmd);
String artist = intent.getStringExtra("artist"); String artist = intent.getStringExtra("artist");
String album = intent.getStringExtra("album"); String album = intent.getStringExtra("album");
String track = intent.getStringExtra("track"); 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(); // Toast.makeText(MainActivity.this, track, Toast.LENGTH_SHORT).show();

View File

@ -5,7 +5,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Build; import android.os.Build;
public class RebootRecever extends BroadcastReceiver { public class RebootReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {