Android - 是否有可能拥有硬件交互方法的内容提供者?

问题描述:

我工作的公司制作了一个定制的运行Android的硬件。它将连接到相当多的外围组件。关键的一点是,该设备是为另一家公司。Android - 是否有可能拥有硬件交互方法的内容提供者?

我知道一个ContentProvider,数据可以在应用程序之间共享。然而,我想知道的是,与硬件交互的方法(GPIO交互)是否可以以任何应用程序可以使用的方式进行存储。

例如,假设器件具有映射到LED的某个GPIO引脚。您可以创建一种使LED闪烁的方法,在应用程序中使用它,然后将设备交给其他人,并希望隐藏代码,但再次使用LED闪烁方法。这不是必需的,但可以允许另一个公司构建另一个应用程序来补充我们提供的设备。

任何见解都会有所帮助。

干杯

您可以使用ContentProvider想休息webinterface

从应用:

Uri ledUri = Uri.parse("content://your.app/led"); 
ContentResolver cr = getContentResolver(); 

// "write" data 
ContentValues cv = new ContentValues(); 
cv.put("state", 1); 
cr.insert(ledUri, cv); 

// read data 
int newState = 0; 
Cursor c = cr.query(ledUri, new String[] { "state" }, null, null, null); 
if (c.moveToFirst()) { 
    newState = c.getInt(0); 
} 

您的供应商里面,而不是将数据写入到您只需设置/数据库中读取GPIO状态。大致如

@Override 
public Uri insert(Uri uri, ContentValues values) { 
    if (uri.toString().equals("content://your.app/led")) { 
     int requestedState = values.getAsInteger("state"); 
     set_gpio_state(requestedState); 
    } 
} 

如何从Java获取GPIO是另一个问题,因为它们只能在内核级别访问(AFAIK)。

+0

干杯,听起来很有希望。好点,我在一个单独的问题中提出这个问题。 – mgibson 2013-03-26 17:20:10

+0

@mgibson似乎你可以通过sysfs导出来访问GPIO,例如https://groups.google.com/forum/?fromgroups=#!topic/android-porting/PJderXD-G_4或http://*.com/questions/8723911/linux-userspace-gpio-interrupts-using-sysfs 。需要访问设备固件源。您还可以添加特殊权限(Android硬件权限映射到Linux组成员身份),因此只有您的contentprovider应用可以读取/写入这些值。 – zapl 2013-03-26 17:41:30

+0

再次,这是一些很好的信息,谢谢!您认为使用ContentProvider作为共享各种不需要查看源代码的开发人员之间硬件方法的方法是可行的吗?或者,一旦GPIO功能暴露给sysfs,编译后的.jar文件就更合适了?基本上寻找类似于Android硬件库的东西,例如相机等 – mgibson 2013-03-27 10:25:20