4

ボタンをクリックすると起動が完了するようにブロードキャストレシーバーを有効または無効にしたい。ボタンが1回クリックされるまでレシーバーは応答しないはずです。私はいくつかの同様の質問を見ましたが、答えのどれもうまくいきませんでした..助けてください...

このコードを試しましたが、機能しませんでした。

PackageManager pm  = getApplicationContext().getPackageManager();
ComponentName componentName = new ComponentName("mypackage", ".receivername");
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
4

4 に答える 4

20

これを試して

b1.setOnClickListener(new View.OnClickListener() {

     @Override
     public void onClick(View v) {
        // TODO Auto-generated method stub

            PackageManager pm  = Re_editActivity.this.getPackageManager();
            ComponentName componentName = new ComponentName(currentActivity.this, name_of_your_receiver.class);
            pm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                            PackageManager.DONT_KILL_APP);
            Toast.makeText(getApplicationContext(), "activated", Toast.LENGTH_LONG).show();

            }
        });

b2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            PackageManager pm  = Re_editActivity.this.getPackageManager();
            ComponentName componentName = new ComponentName(currentActivity.this, name_of_your_receiver.class);
            pm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                            PackageManager.DONT_KILL_APP);
            Toast.makeText(getApplicationContext(), "cancelled", Toast.LENGTH_LONG).show();
        }
    });

ここでは、button1を使用して放送受信機をアクティブにし、button2を使用して非アクティブにします。また、放送受信機をマニフェストファイルに登録して設定する必要があります。

<receiver android:name="name_of_your_receiver" android:enabled="false">
        <intent-filter >                
            <action android:name="android.intent.action.BOOT_COMPLETED"/>                
        </intent-filter>
    </receiver>
于 2012-07-02T11:27:38.853 に答える
1

onCreateメソッドとonDestroyメソッド内でレシーバーを登録できるサンプルコードで、登録を解除します。

    private BroadcastReceiver receiver;

    @Overrride
    public void onCreate(Bundle savedInstanceState){

      // your oncreate code

      IntentFilter filter = new IntentFilter();
      filter.addAction("SOME_ACTION");
      filter.addAction("SOME_OTHER_ACTION");

      receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
          //do something based on the intent's action
        }
      }

      registerReceiver(receiver, filter);
}

onDestroyメソッドでこれを実行することを忘れないでください:

@Override
protected void onDestroy() {
  unregisterReceiver(receiver); //unregisterReceiver can be anywhere based on your requirement
}
于 2012-07-02T07:14:01.383 に答える
1

このように使用する方が簡単だと思います。

public static void setAppComponentEnabled(@NonNull final Context context, @NonNull final Class<?> componentClass, final boolean enable) {
    final PackageManager pm = context.getPackageManager();
    final int enableFlag = enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
    pm.setComponentEnabledSetting(new ComponentName(context, componentClass), enableFlag, PackageManager.DONT_KILL_APP);
}
于 2018-04-07T23:06:06.950 に答える
0

これを試して:

YourBroadcastReceiver mReceiver = new YourBroadcastReceiver();
IntentFilter filter = new IntentFilter();  //Filter for your receiver...
filter.addAction(your action goes here...);
registerReceiver(mReceiver , filter); **// Register**

unregisterReceiver(mReceiver );  **// Unregister**
于 2012-07-02T07:16:01.043 に答える