2

setComponentEnabledSettingを使用すると、アンインストール時に Android OS が再起動します。他の誰かがこれに出くわしましたか?

エラー/AndroidRuntime(1143): *システム プロセスでの致命的な例外: android.server.ServerThread java.lang.RuntimeException: ブロードキャスト インテントの受信エラー { act=android.intent.action.PACKAGE_CHANGED dat=package:com.example.foo flg= 0x8000010 (エキストラあり) } com.android.server.NotificationManagerService$2@41b00228

原因: java.lang.IllegalArgumentException: 不明なパッケージ: com.android.server.pm.Settings.getApplicationEnabledSettingLPr(Settings.java:2443) の com.example.foo

コードは次のとおりです。

public class FooActivity extends Activity {

    @Override
    protected void onResume() {
        super.onResume();
        enableReceiver();
    }

    @Override
    protected void onPause() {
        super.onPause();
        disableReceiver();
    }

    private void enableReceiver() {
        setReceiverState(PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
    }

    private void disableReceiver() {
        setReceiverState(PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
    }

    private void setReceiverState(int receiverState) {
        getPackageManager().setComponentEnabledSetting(new ComponentName(this, FooBroadcastReceiver.class), receiverState, PackageManager.DONT_KILL_APP);
    }

    public static class FooBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
        }
    }

}

マニフェストの受信者:

<receiver android:name="com.example.foo.FooActivity$FooBroadcastReceiver"/>

ありがとう!

4

2 に答える 2

0

アクティビティ内で android.intent.action.PACKAGE_CHANGED インテントの BroadcastReceiver を登録し、その状態を変更してからパッケージをアンインストールしたようです。クラッシュはバグのように聞こえますが、受信者がまだ登録されている間に、通知マネージャーがアンインストールを配信しようとしてクラッシュしたと推測しています。

アンインストールする前に電話してみませsetReceiverState(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);んか?

于 2013-05-23T22:51:44.347 に答える