2

アップデート

私の差し迫った問題は、以下の私の答えに従って解決されました。私の環境 (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");
}

私は次BroadcastReceiverFragmentような形で登録します:

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) の問題なのだろうかと思います。残念ながら、私のグーグルは、一般的な解決策に関するより一般的な問題に私を導くだけです。

4

1 に答える 1

1

最終的な解決策 - 意味がないように見えることに同意しますが、ここにあります:

同じ権限を使用する 2 つのアプリがあります -com.testcom.runtest.

上記のように、com.testDEBUG ビルドでは壊れていました。com.runtestしかし、それがまだ機能していることに気付きました。


手順:

  1. インストールcom.runtestして動作確認
  2. デバイスから両方のアプリをアンインストールしました
  3. - に名前が変更さcom.runtestcom.testました Eclipse で (Android Tools... Rename Application Package)
  4. 私のデバイスのEclipseでこの名前が変更されたアプリをデバッグしました-うまくいきました
  5. これを削除し、名前を「偽」に変更しましたcom.test
  6. com.test私のデバイスの Eclipse で元のアプリをデバッグしました- やっと動きました!

何らかの理由で、壊れたアプリを動作中のアプリで上書きすると、何かが変わり、デバイスが修正されました。

于 2013-04-02T09:02:06.863 に答える