을 활성화하고 비활성화 :내가 사용하고이 패키지 매니저 방법을 사용하여 방송 수신기를 해제하려고 브로드 캐스트 수신기
setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
방송 수신기는 매니페스트에 등록됩니다. 수신기 잘 작동하지만 내가 그것을 해제하려고 할 때 여전히 브로드 캐스트 메시지를받습니다. 매니페스트의 수신기를 "android : enabled ="false ""로 비활성화하면 수신자가 아무 것도 수신하지 못하고 수신자를 활성화 할 수 없습니다.
서비스 내부에서 메서드를 호출합니다.
PackageManager pm = getApplicationContext().getPackageManager();
ComponentName componentName = new ComponentName("com.app",
".broadcast_receivers.OnNetworkChangedReceiver");
pm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
안드로이드 매니페스트 :
<receiver android:name=".broadcast_receivers.OnNetworkChangedReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
수신자
public class OnNetworkChangedReceiver extends BroadcastReceiver {
private static final String TAG = "OnNetworkChangedReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "in OnNetworkChanged");
}
}
은 또한 어제 액티비티 내부에서 방법을했다. 나는 그것이 효과가 있다고 생각했지만 오늘은 더 이상 아무것도 작동하지 않습니다. 내가 어제 오해하여 수신기를 사용하지 못하게 한 의도 (orroid.net.conn.CONNECTIVITY_CHANGE)에 큰 지연이있을 수 있습니까?
PackageManager의 접근 방식이 올바른 방향입니까? 아니면 아이디어에 기본적인 오류가 있습니까? 귀하의 상황을 생각하고 오버
덕분에 많이, 스벤
@Sven으로, 귀하의 초기 실수는 매우 일반적인 것이 었습니다. 필요한 ComponentName ("com.app", "com.app.broadcast_receivers.OnNetworkChangedReceiver"); 패키지 이름이 두 번 나열되기 때문에이 솔루션이 이상하게 보입니다. 그리고 'New Android Wizard'이후 ...'는 단지 프로젝트를 처음 생성 할 때 오직 하나의 패키지 이름만을 요구할 수 있습니다. 단 하나만 있다고 생각하기 쉽지만 실제로는 그 문자열을 사용하여 두 개의 다른 패키지 이름에 할당합니다. 이름 및 활동 패키지 이름. –
'PackageManager.DONT_KILL_APP' 대신'0'을 사용하면 올바르게 문서를 읽는다면 활동을 없앨 수 있습니다. http://developer.android.com/reference/android/content/pm/PackageManager . Set SetComponentEnabledSetting 섹션에 .html. –