1、首先你应该会
AIDL和远程Service调用
http://blog.csdn.net/tabactivity/article/details/35832515
2、接着在AndroidManifest.xml里注册服务
<service android:name="com.content.pm.AccountService" android:label="AccountService" android:enabled="true" />
1、如果想要服务可以被其他程序(APP)访问,必须加上
android:enabled="true"
,但此时会提示你这个应该加上权限限制保证他的安全,以至于不被所有程序都能随意访问。
2.声明权限
先在<manifest>标签下加入
<permission android:protectionLevel="normal" android:name="oem.permission.SENDMAIL"></permission>
然后在<service>标签下
android:permission="oem.permission.SENDMAIL"
Android权限级别(protectionLevel)
通常情况下,对于需要付费的操作以及可能涉及到用户隐私的操作,我们都会格外敏感。
出于上述考虑以及更多的安全考虑,Android中对一些访问进行了限制,如网络访问(需付费)以及获取联系人(涉及隐私)等。应用程序如果想要进行此类访问,则需要申请相应权限。Android对这些权限进行了四类分级,不同级别的权限对应不同的认证方式。
normal:低风险权限,只要申请了就可以使用(在AndroidManifest.xml中添加<uses-permission>标签),安装时不需要用户确认;
dangerous:高风险权限,安装时需要用户的确认才可使用;
signature:只有当申请权限的应用程序的数字签名与声明此权限的应用程序的数字签名相同时(如果是申请系统权限,则需要与系统签名相同),才能将权限授给它;
signatureOrSystem:签名相同,或者申请权限的应用为系统应用(在system image中)。
上述四类权限级别同样可用于自定义权限中。如果开发者需要对自己的应用程序(或部分应用)进行访问控制,则可以通过在AndroidManifest.xml中添加<permission>标签,将其属性中的protectionLevel设置为上述四类级别中的某一种来实现。
我这里修改后就是:
<service android:name="com.content.pm.AccountService" android:label="AccountServicee" android:enabled="true" android:exported="true" android:permission="cn.com.talker.permission.ACCESS_ACCOUNT" > </service>
3、在另外一个APK里,绑定服务,并添加权限,访问AIDL的方法
Intent mIntent=new Intent(); mIntent.setComponent(new ComponentName("cn.com.talker.beta", "com.content.pm.AccountService")); bindService(mIntent, conn, Context.BIND_AUTO_CREATE); new Thread(new Runnable() { @Override public void run() { String assString; try { Thread.sleep(5000); assString=mAccountService.getAreaCode("aaa")); if(assString!=null){ Log.e("aaaaa", assString); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start();