web-dev-qa-db-ja.com

資格のあるユーザーなしでシステムプロセスでメソッドを呼び出すと、システムでこのエラーが発生する問題を修正する方法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);

資格のあるユーザーなしでシステムプロセスのメソッドを呼び出す

それを修正する方法はありますか?

4
Pein

これは単なる警告です。

ソースコードを見るとわかります: https://Android.googlesource.com/platform/frameworks/base/+/b267554/core/Java/Android/app/ContextImpl.Java

メソッド「warnIfCallingFromSystemProcess()」を検索するだけです

2
Bamerza

sendBroadcast(Intent intent)を使用する代わりに、これを使用します

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