我正在与马克墨菲的优秀Commonsware书 - 但它是很多消化。我构建了“FakePlayer”应用程序(假装成MP3播放器)。它包含一项服务。作为一个学习的经验,我试着写一个简单的应用程序(只有一个按钮),它的点击处理程序:不允许开始服务意图未经许可 - 发件人没有获得许可
Intent i = new Intent();
i.setAction("com.example.cwfakeplayer.MyPlayerService");
Context context = getApplicationContext();
context.startService(i);
它好工作 - 服务开始OK。我注意到Eclipse的抱怨该服务没有权限,所以我加入2线,Android的更新服务的清单:权限和android:出口:
<service
android:name="MyPlayerService"
android:permission="com.example.fakeplayer.permission.MY_PLAYER_PERMISSION"
android:exported="true"
<intent-filter>
<action android:name="com.example.fakeplayer.MyPlayerService"></action>
</intent-filter>
</service>
我重新载入播放器应用到设备上(我使用Galaxy S2)在eclipse下使用'debug'。它似乎工作;初学者应用程序导致了我期望的权限异常。
然后我加入到启动应用程序的清单(给它的权限):
<manifest
...
<uses-sdk ....
....
<uses-permission android:name="com.example.fakeplayer.permission.MY_PLAYER_PERMISSION" />
我重载起动应用到设备上(使用Eclipse下调试)。仍然在初学者应用程序中获得权限错误。
我从设备中删除了两个应用程序,然后重新安装(使用调试...),服务应用程序,然后启动器。仍然有烫发错误。
我正在通过Murphy先生的高级Android书中的'如何使用远程服务'部分,所以我意识到这不是跨应用程序工作的最佳方式。
我做了一个'adb shell dumpsys软件包',它位于初学者应用程序中,并且发现它有'permissionsFixed = false'并且没有'grantedPermissions'部分。我认为这意味着初学者应用程序的清单更改并未设法将该应用程序添加到该应用程序中。但我不知道为什么。作为一种学习体验,它迄今只产生了一些混淆......
任何线索非常感谢!谢谢!
它也有助于首先包含。感谢您的回答,以及优秀的书籍和示例代码。我没有看到Android书中使用的任何示例代码,所以我忽略了它(我_did_阅读了这一章 - 但我非常关注代码)。 –
2013-03-18 17:06:53
@ArtSwri:那么你显然正在阅读的这本书(“高级Android”)在一年前已经退役了,其内容已经被折叠到[我的主要书籍](http://commonsware.com)中。 ''元素为自定义权限,因为我在插件示例中使用它们:https://github.com/commonsguy/cw-omnibus/tree/master/RemoteViews这就是说,谢谢你的好话! –
CommonsWare
2013-03-18 17:12:17
哇我'米远远落后于ñ我想 - 我的订阅用完了。现在离开去更新... – 2013-03-18 17:17:51