2016-09-27 1 views
1

설정 응용 프로그램에서 네트워크 상태 변경에 대한 메시지를 받으려고합니다. 그것은 다음과 같습니다 : 나는 onResume에 등록 및 등록 해제수정 방법 자격이없는 사용자없이 시스템 프로세스에서 메소드를 호출하면 시스템 android 애플리케이션에서이 오류가 발생합니까?

private BroadcastReceiver mNetwrokStateReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     Log.d("NetworkStateReceiver_DEVICE_INFO", "network state changed"); 
     if (isNetworkConnected()) { 
      Log.d("NetworkStateReceiver_DEVICE_INFO", "network connected"); 
      mHelpPreference.setEnabled(true); 
     } else { 
      mHelpPreference.setEnabled(false); 
      Log.d("NetworkStateReceiver_DEVICE_INFO", "network disconnected"); 
     } 
    } 
}; 

: 나는 DeviceInfoFragment에 메시지를 보내려고하고있어이 수신기에서

<receiver android:name="com.android.settings.NetworkStateReceiver"> 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
     </intent-filter> 
</receiver> 



public class NetworkStateReceiver extends BroadcastReceiver 
{ 
    public static final String TAG = "NetworkStateReceiver"; 
    public static final String NETWORK_CHANGED_ACTION = "com.android.settings.NetworkStateReceiver.NETWORK_CHANGED"; 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Log.d(TAG, "Network state changed"); 
     Intent i = new Intent(); 
     i.setAction(NETWORK_CHANGED_ACTION); 
     context.sendBroadcast(i); 
    } 
} 

,이 방송을 캐치 할 필요 수신기가 inPause.

하지만이 줄 NetworkStateReceiver에 오류가 발생했습니다 : 그것을 해결하기 위해 어떤 방법이

context.sendBroadcast(i); 

자격을 갖춘 사용자

없이 시스템 프로세스에서 메소드를 호출인가?

답변

0

대신 sendBroadcast(Intent intent)를 사용, 그것은 단지 경고입니다이

sendBroadcastAsUser(i, new UserHandle(UserHandle.USER_CURRENT)); 
+0

, 당신은'INTERACT_ACROSS_USERS' 권한을 했습니까 – Pein

+0

작동하지 않습니다 시도? – fluffyBatman

+0

허락을 받아서 시도해보십시오. ( – Pein

2

를 사용합니다.

당신은 소스 코드를보고 그것을 볼 수 있습니다 https://android.googlesource.com/platform/frameworks/base/+/b267554/core/java/android/app/ContextImpl.java

그냥 "warnIfCallingFromSystemProcess()"방법을 검색

+0

통찰력있는 답변 주셔서 감사합니다. 경고를 표시하지 않고 추가 권한을 시스템 uid에 유지할 수있는 방법이없는 것처럼 보입니다. 시스템 앱을위한 첫 번째 장소. 이상합니다. – jschlepp