アップデート
私の差し迫った問題は、以下の私の答えに従って解決されました。私の環境 (PC + デバイス) では、DEBUG ビルドでカスタム パーミッションが許可されません。
私は、数週間前に DEBUG ビルドを正常に実行できたと確信しています。したがって、「断続的な」エラーの説明です。
更新 2
別の開発者のマシンで同期されたコードは、Eclipse を介して DEBUG モードでデバイス上で正常に動作します。私のデバイスでは、彼のマシンからは機能しません。
また、私のマシンからの DEBUG ビルドは、この他のデバイスで正常に動作します。
これにより、デバイスで何か問題が発生したかどうか疑問に思いますか?
カスタム権限で断続的な「権限拒否」Intents
の問題が発生します。これは、コードが本番環境で機能しているものの 1 つですが、新しいビルドを作成すると、機能しなくなることがあります。以前は、再起動(デバイスとPC)、プロジェクトのクリーンアップ、アンインストール/再インストール、繰り返しなどのプロセスを通じて、運が良かっただけで修正できました...これは受け入れられません。
私が見る限り、私はIntents
自分のアプリ内でブロードキャストしているカスタム権限に対してすべて正しいことをしています. しかし、logcatは私に次の通常のエラーを与えています:
- W/BroadcastQueue( 389): パーミッション拒否: com.test (pid=22030, uid=10002) からのブロードキャスト インテント { act=A_ACTION flg=0x10 } には、登録された受信機 BroadcastFilter{43918d50 u0 ReceiverList{4391cad8 22030 com.test のため、A_PERMISSION が必要です/10002/u0 リモート:430576d0}}
4.2.1 (Galaxy Nexus) および 4.2.2 (Nexus 7)、または
- W/ActivityManager( 2002): パーミッション拒否: Intent { act=A_ACTION flg=0x10 } を ProcessRecord{41a12748 31496:com.test/10115} (pid=31496, uid=10115) に受信するには、送信者 com.test ( uid 10115)
4.0 (S2) & 2.3.3 (Samsung Ace)。
つまり、標準誤差です。
私のマニフェストは次のように述べています。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test"
android:versionCode="1"
android:versionName="4.10.0.3" >
<permission
android:name="A_PERMISSION"
android:description="@string/broadcast_permission_desc"
android:label="@string/broadcast_permission_label"
android:permissionGroup="@string/broadcast_permission_group"
android:protectionLevel="signature" />
<uses-permission android:name="A_PERMISSION" />
etc.....
これらの文字列は次のように定義されます (fwiw):
<string name="broadcast_permission_label">Private Broadcast</string>
<string name="broadcast_permission_desc">This permission allows the necessary components of the application to receive private broadcasts that are sent within the application.</string>
<string name="broadcast_permission_name">A_PERMISSION</string>
<string name="broadcast_permission_group">A_GROUP</string>
ブロードキャストを行うために使用するベース APPLICATION サブクラスにメソッドがあります。
public void sendBroadcast(Intent i)
{
// hardcoded custom permission
super.sendBroadcast(i, "A_PERMISSION");
}
私は次BroadcastReceiver
のFragment
ような形で登録します:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// hardcoded custom permission
MyApp.getInstance().registerReceiver(myReceiver, myFilter,
"A_PERMISSION", null);
}
次の関連する質問を喜んで確認しました。
このサイトで同様の質問がカバーされていると思います。
私の問題は、断続的ですが多くの時間を浪費することです。つまり、一部のビルドはすべての電話で機能し、一部のビルドはすべての電話で失敗します。
これは、フレームワークの 1 つ (Android OS、またはおそらく Eclipse / Android SDK) の問題なのだろうかと思います。残念ながら、私のグーグルは、一般的な解決策に関するより一般的な問題に私を導くだけです。