設定アプリケーションで、ネットワークステータスの変更に関するメッセージを受信しようとしています。次のようになります。
<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);
資格のあるユーザーなしでシステムプロセスのメソッドを呼び出す
それを修正する方法はありますか?
これは単なる警告です。
ソースコードを見るとわかります: https://Android.googlesource.com/platform/frameworks/base/+/b267554/core/Java/Android/app/ContextImpl.Java
メソッド「warnIfCallingFromSystemProcess()」を検索するだけです
sendBroadcast(Intent intent)
を使用する代わりに、これを使用します
sendBroadcastAsUser(i, new UserHandle(UserHandle.USER_CURRENT));