私は Mark Murphy の優れた Commonsware の本を読んでいますが、消化するのは大変です。「FakePlayer」アプリを作成しました (mp3 プレーヤーのふりをします)。サービスが含まれています。学習経験として、クリック ハンドラーが行う簡単なアプリ (ボタンしかない) を作成しようとしました。
Intent i = new Intent();
i.setAction("com.example.cwfakeplayer.MyPlayerService");
Context context = getApplicationContext();
context.startService(i);
正常に動作しました - サービスは正常に開始されました。Eclipse がサービスに対する権限がないことを訴えていることに気付いたので、android:permissions と android:exported の 2 行を追加してサービスのマニフェストを更新しました。
<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 でデバッグを使用)。スターターアプリで引き続き許可エラーが発生します。
デバイスから両方のアプリを削除し、(デバッグを使用して) 再インストールしました。最初にサービス アプリ、次にスターターを使用しました。それでもパーマエラーが発生します。
マーフィー氏の高度な Android ブックの「リモート サービスの使用方法」セクションに取り組んでいるので、これはおそらく複数のアプリで作業するための最良の方法ではないことに気付きました。
「adb shell dumpsys package」を実行し、スターター アプリを見つけたところ、「permissionsFixed=false」があり、「grantedPermissions」セクションがないことがわかりました。これは、スターター アプリのマニフェストの変更によって、パーマがアプリに追加されなかったことを意味します。しかし、私には理由がわかりません。学習経験として、これまでのところ混乱しか生じていません....
手がかりは大歓迎です!ありがとう!