2016-09-27 2 views
1

В приложении настроек я пытаюсь получить сообщение об изменении состояния сети. Это выглядит следующим образом:Как исправить Вызов метода в системном процессе без квалифицированного пользователя этой ошибки в системном приложении Android?

<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); 
    } 
} 

Из этого приемника я пытаюсь отправить сообщение DeviceInfoFragment, есть приемник, который должен поймать эту передачу:

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"); 
     } 
    } 
}; 

зарегистрировать его в onResume и разрегистрировать в onPause.

Но я получил ошибку в NetworkStateReceiver в этой строке:

context.sendBroadcast(i); 

Вызов метода в системе процесса без квалифицированного пользователя

Есть ли способ это исправить?

ответ

0

Вместо использования sendBroadcast(Intent intent) используйте этот

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

Пробовал, не работает – Pein

+0

ли вы предоставить 'разрешение INTERACT_ACROSS_USERS'? – fluffyBatman

+0

Пробовал с разрешением, тот же результат :( – Pein

2

Это просто предупреждение.

Вы можете видеть, что, посмотрев на исходный код: https://android.googlesource.com/platform/frameworks/base/+/b267554/core/java/android/app/ContextImpl.java

Просто поиск метода «warnIfCallingFromSystemProcess()»

+0

Спасибо за ваш проницательный ответ. К сожалению, кажется, что нет способа подавить предупреждение и поддерживать системный uid для получения дополнительных привилегий. Ни какая-либо документация о том, почему это предупреждение в первое место для системных приложений. Это странно. – jschlepp

Смежные вопросы