3

最新のSDKにアップグレードした後、ウィジェットの開発に戻りましたが、突然、ウィジェットの起動に次のメッセージが表示されて失敗しました。

ERROR/AndroidRuntime(5296): java.lang.RuntimeException: 
Unable to start receiver topjob.widget.SearchWidget: 
java.lang.SecurityException: Permission Denial: 
attempt to change component state from pid=5296, uid=10057, package uid=10048

例外が発生する2行のコードは次のとおりです。

@Override
public void onEnabled(Context context) {
    PackageManager pm = context.getPackageManager();
    pm.setComponentEnabledSetting(new ComponentName("topjob",
            ".widget.SearchWidgetBroadcastReceiver"), 
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);
    startAlarm(context, UPDATE_RATE_SEC);
}

したがって、上記のコードでは、SecurityExceptionがスローstartAlarm()されるため、実行されることはありません。pm.setComponentEnabledSetting()

マニフェストにセキュリティ設定がありませんか?現在私は持っています:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

私はのために開発していてSDK v. 1.5、それはうまく機能していました

PSそれは電話とエミュレーターで起こります

4

4 に答える 4

3

manifest.xml で追加します

<permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
android:sharedUserId="android.uid.system"

Android.mk で追加します

LOCAL_CERTIFICATE := platform  

これですべてです。

于 2012-06-26T06:02:23.787 に答える
1

この権限をマニフェストに追加してみてください。

<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
于 2012-01-17T08:22:27.360 に答える
0

OK - これは本当の答えではなく、回避策です。誰かが介入して、これをどのように行うべきかについて回答または説明を提供したい場合は、喜んで受け入れます. とにかく -newStateフラグを からCOMPONENT_ENABLED_STATE_ENABLEDに変更して動作させましたPackageManager.COMPONENT_ENABLED_STATE_DEFAULT。私の放送受信機はマニフェストで状態を有効にしているので、問題なく動作します

于 2010-01-12T23:39:43.300 に答える
0

このエラー「java.lang.SecurityException: Permission Denial:」は、実行中のパッケージからコンポーネントを無効にしようとしたときにのみ発生しました。それ以外の場合は、成功しました。

于 2011-11-08T10:02:17.550 に答える