我正在使用 Mark Murphy 的优秀 Commonsware 书籍——但要消化的东西很多。我构建了“FakePlayer”应用程序(伪装成 mp3 播放器)。它包含一项服务。作为学习经验,我尝试编写一个简单的应用程序(只有一个按钮),其点击处理程序可以:
Intent i = new Intent();
i.setAction("com.example.cwfakeplayer.MyPlayerService");
Context context = getApplicationContext();
context.startService(i);
它工作正常 - 服务启动正常。我注意到 Eclipse 抱怨该服务没有权限,所以我通过添加 2 行 android:permissions 和 android:exported 来更新服务的清单:
<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>
我在 Eclipse 下使用“调试”将播放器应用程序重新加载到设备上(我使用的是 Galaxy S2)。它似乎奏效了;入门应用程序导致了我预期的权限异常。
然后我添加到启动应用程序的清单(授予它权限):
<manifest
...
<uses-sdk ....
....
<uses-permission android:name="com.example.fakeplayer.permission.MY_PLAYER_PERMISSION" />
我将启动应用程序重新加载到设备上(使用 Eclipse 下的调试)。仍然在启动应用程序中获得权限错误。
我从设备中删除了这两个应用程序并重新安装(使用调试...),首先是服务应用程序,然后是启动程序。仍然得到烫发错误。
我正在研究 Murphy 先生的高级 Android 书中的“如何使用远程服务”部分,所以我意识到这可能不是跨应用程序工作的最佳方式。
我做了一个“adb shell dumpsys package”,找到了启动应用程序,发现它有“permissionsFixed=false”,没有“grantedPermissions”部分。我认为这意味着启动应用程序中的清单更改没有设法将烫发添加到应用程序中。但我不知道为什么。作为一种学习体验,到目前为止它只产生了困惑......
任何线索都非常感谢!谢谢!