5

我正在使用 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”部分。我认为这意味着启动应用程序中的清单更改没有设法将烫发添加到应用程序中。但我不知道为什么。作为一种学习体验,到目前为止它只产生了困惑......

任何线索都非常感谢!谢谢!

4

2 回答 2

3

我通过添加 2 行 android:permissions 和 android:exported 更新了服务的清单

从技术上讲,android:exported="true"是多余的,因为具有<intent-filter>自动使<service>导出。

我从设备中删除了这两个应用程序并重新安装(使用调试...),首先是服务应用程序,然后是启动程序。仍然得到烫发错误。

您没有显示您曾经在哪里声明过该<permission>元素的自定义权限。在实践中,如果您控制两个应用程序,则将相同的<permission>元素放在两个清单中,因此您的两个应用程序的安装顺序不再重要。

于 2013-03-18T11:17:58.390 回答
-2

尝试在清单中替换它

<service android:name="com.example.fakeplayer.MyPlayerService"></service>

代替

<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>

如果这不起作用,请发布您的错误。

于 2013-03-18T03:08:39.093 回答