Incompatible hardware detetction added to OpenCV Manager(Feature #2941)
This commit is contained in:
parent
aef8e6ba59
commit
ec6f0e1baf
@ -4,23 +4,43 @@ import android.os.IBinder;
|
|||||||
|
|
||||||
public class BinderConnector
|
public class BinderConnector
|
||||||
{
|
{
|
||||||
public BinderConnector(MarketConnector Market)
|
public BinderConnector(MarketConnector Market) {
|
||||||
{
|
mMarket = Market;
|
||||||
Init(Market);
|
|
||||||
}
|
|
||||||
public native IBinder Connect();
|
|
||||||
public boolean Disconnect()
|
|
||||||
{
|
|
||||||
Final();
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
public boolean Init() {
|
||||||
|
boolean result = false;
|
||||||
|
if (mIsReady)
|
||||||
|
result = Init(mMarket);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public native IBinder Connect();
|
||||||
|
|
||||||
|
public boolean Disconnect()
|
||||||
{
|
{
|
||||||
System.loadLibrary("OpenCVEngine");
|
if (mIsReady)
|
||||||
System.loadLibrary("OpenCVEngine_jni");
|
Final();
|
||||||
|
|
||||||
|
return mIsReady;
|
||||||
}
|
}
|
||||||
|
|
||||||
private native boolean Init(MarketConnector Market);
|
private native boolean Init(MarketConnector Market);
|
||||||
public native void Final();
|
private native void Final();
|
||||||
|
private static boolean mIsReady = false;
|
||||||
|
private MarketConnector mMarket;
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
System.loadLibrary("OpenCVEngine");
|
||||||
|
System.loadLibrary("OpenCVEngine_jni");
|
||||||
|
mIsReady = true;
|
||||||
|
}
|
||||||
|
catch(UnsatisfiedLinkError e) {
|
||||||
|
mIsReady = false;
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -47,9 +47,17 @@ public class HardwareDetector
|
|||||||
|
|
||||||
public static native int DetectKnownPlatforms();
|
public static native int DetectKnownPlatforms();
|
||||||
|
|
||||||
static
|
public static boolean mIsReady = false;
|
||||||
{
|
|
||||||
System.loadLibrary("OpenCVEngine");
|
static {
|
||||||
System.loadLibrary("OpenCVEngine_jni");
|
try {
|
||||||
|
System.loadLibrary("OpenCVEngine");
|
||||||
|
System.loadLibrary("OpenCVEngine_jni");
|
||||||
|
mIsReady = true;
|
||||||
|
}
|
||||||
|
catch(UnsatisfiedLinkError e) {
|
||||||
|
mIsReady = false;
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,31 +3,62 @@ package org.opencv.engine;
|
|||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import android.os.RemoteException;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
|
||||||
public class OpenCVEngineService extends Service
|
public class OpenCVEngineService extends Service
|
||||||
{
|
{
|
||||||
private static final String TAG = "OpenCVEngine/Service";
|
private static final String TAG = "OpenCVEngine/Service";
|
||||||
private IBinder mEngineInterface;
|
private IBinder mEngineInterface = null;
|
||||||
private MarketConnector mMarket;
|
private MarketConnector mMarket;
|
||||||
private BinderConnector mNativeBinder;
|
private BinderConnector mNativeBinder;
|
||||||
public void onCreate()
|
|
||||||
{
|
public void onCreate() {
|
||||||
Log.i(TAG, "Service starting");
|
Log.i(TAG, "Service starting");
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
Log.i(TAG, "Engine binder component creating");
|
Log.i(TAG, "Engine binder component creating");
|
||||||
mMarket = new MarketConnector(getBaseContext());
|
mMarket = new MarketConnector(getBaseContext());
|
||||||
mNativeBinder = new BinderConnector(mMarket);
|
mNativeBinder = new BinderConnector(mMarket);
|
||||||
mEngineInterface = mNativeBinder.Connect();
|
if (mNativeBinder.Init()) {
|
||||||
Log.i(TAG, "Service started successfully");
|
mEngineInterface = mNativeBinder.Connect();
|
||||||
|
Log.i(TAG, "Service started successfully");
|
||||||
|
} else {
|
||||||
|
Log.e(TAG, "Cannot initialize native part of OpenCV Manager!");
|
||||||
|
Log.e(TAG, "Using stub instead");
|
||||||
|
|
||||||
|
mEngineInterface = new OpenCVEngineInterface.Stub() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean installVersion(String version) throws RemoteException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLibraryList(String version) throws RemoteException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLibPathByVersion(String version) throws RemoteException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getEngineVersion() throws RemoteException {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IBinder onBind(Intent intent)
|
public IBinder onBind(Intent intent) {
|
||||||
{
|
|
||||||
Log.i(TAG, "Service onBind called for intent " + intent.toString());
|
Log.i(TAG, "Service onBind called for intent " + intent.toString());
|
||||||
return mEngineInterface;
|
return mEngineInterface;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean onUnbind(Intent intent)
|
public boolean onUnbind(Intent intent)
|
||||||
{
|
{
|
||||||
Log.i(TAG, "Service onUnbind called for intent " + intent.toString());
|
Log.i(TAG, "Service onUnbind called for intent " + intent.toString());
|
||||||
|
@ -42,6 +42,26 @@ public class ManagerActivity extends Activity
|
|||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
if (!HardwareDetector.mIsReady) {
|
||||||
|
Log.e(TAG, "Cannot initialize native part of OpenCV Manager!");
|
||||||
|
|
||||||
|
AlertDialog dialog = new AlertDialog.Builder(this).create();
|
||||||
|
|
||||||
|
dialog.setTitle("OpenCV Manager Error");
|
||||||
|
dialog.setMessage("OpenCV Manager is incompatible with this device. Please replace it with an appropriate package.");
|
||||||
|
dialog.setCancelable(false);
|
||||||
|
dialog.setButton("OK", new DialogInterface.OnClickListener() {
|
||||||
|
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
dialog.show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
setContentView(R.layout.main);
|
setContentView(R.layout.main);
|
||||||
|
|
||||||
TextView OsVersionView = (TextView)findViewById(R.id.OsVersionValue);
|
TextView OsVersionView = (TextView)findViewById(R.id.OsVersionValue);
|
||||||
@ -186,6 +206,20 @@ public class ManagerActivity extends Activity
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mPackageChangeReciever = new BroadcastReceiver() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
Log.d("OpenCVManager/Reciever", "Bradcast message " + intent.getAction() + " reciever");
|
||||||
|
Log.d("OpenCVManager/Reciever", "Filling package list on broadcast message");
|
||||||
|
if (!bindService(new Intent("org.opencv.engine.BIND"), new OpenCVEngineServiceConnection(), Context.BIND_AUTO_CREATE))
|
||||||
|
{
|
||||||
|
TextView EngineVersionView = (TextView)findViewById(R.id.EngineVersionValue);
|
||||||
|
EngineVersionView.setText("not avaliable");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
|
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
|
||||||
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
|
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
|
||||||
@ -199,17 +233,23 @@ public class ManagerActivity extends Activity
|
|||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
unregisterReceiver(mPackageChangeReciever);
|
if (mPackageChangeReciever != null)
|
||||||
|
unregisterReceiver(mPackageChangeReciever);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
Log.d(TAG, "Filling package list on resume");
|
if (HardwareDetector.mIsReady) {
|
||||||
if (!bindService(new Intent("org.opencv.engine.BIND"), new OpenCVEngineServiceConnection(), Context.BIND_AUTO_CREATE))
|
Log.d(TAG, "Filling package list on resume");
|
||||||
{
|
OpenCVEngineServiceConnection connection = new OpenCVEngineServiceConnection();
|
||||||
TextView EngineVersionView = (TextView)findViewById(R.id.EngineVersionValue);
|
if (!bindService(new Intent("org.opencv.engine.BIND"), connection, Context.BIND_AUTO_CREATE)) {
|
||||||
EngineVersionView.setText("not avaliable");
|
Log.e(TAG, "Cannot bind to OpenCV Manager service!");
|
||||||
|
TextView EngineVersionView = (TextView)findViewById(R.id.EngineVersionValue);
|
||||||
|
if (EngineVersionView != null)
|
||||||
|
EngineVersionView.setText("not avaliable");
|
||||||
|
unbindService(connection);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,19 +265,7 @@ public class ManagerActivity extends Activity
|
|||||||
protected int ManagerApiLevel = 0;
|
protected int ManagerApiLevel = 0;
|
||||||
protected String ManagerVersion;
|
protected String ManagerVersion;
|
||||||
|
|
||||||
protected BroadcastReceiver mPackageChangeReciever = new BroadcastReceiver() {
|
protected BroadcastReceiver mPackageChangeReciever = null;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
Log.d("OpenCVManager/Reciever", "Bradcast message " + intent.getAction() + " reciever");
|
|
||||||
Log.d("OpenCVManager/Reciever", "Filling package list on broadcast message");
|
|
||||||
if (!bindService(new Intent("org.opencv.engine.BIND"), new OpenCVEngineServiceConnection(), Context.BIND_AUTO_CREATE))
|
|
||||||
{
|
|
||||||
TextView EngineVersionView = (TextView)findViewById(R.id.EngineVersionValue);
|
|
||||||
EngineVersionView.setText("not avaliable");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
protected class OpenCVEngineServiceConnection implements ServiceConnection
|
protected class OpenCVEngineServiceConnection implements ServiceConnection
|
||||||
{
|
{
|
||||||
@ -246,6 +274,12 @@ public class ManagerActivity extends Activity
|
|||||||
|
|
||||||
public void onServiceConnected(ComponentName name, IBinder service) {
|
public void onServiceConnected(ComponentName name, IBinder service) {
|
||||||
OpenCVEngineInterface EngineService = OpenCVEngineInterface.Stub.asInterface(service);
|
OpenCVEngineInterface EngineService = OpenCVEngineInterface.Stub.asInterface(service);
|
||||||
|
if (EngineService == null) {
|
||||||
|
Log.e(TAG, "Cannot connect to OpenCV Manager Service!");
|
||||||
|
unbindService(this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ManagerApiLevel = EngineService.getEngineVersion();
|
ManagerApiLevel = EngineService.getEngineVersion();
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user