小编Ale*_*zzi的帖子

即使Android M上的移动数据为ON(带连接),也可通过WiFi(无连接)发送请求

我必须将UDP数据包发送到没有互联网连接的WiFi模块(提供自己的AP)但是当我将移动设备连接到AP时,Android会重定向移动数据接口上的数据包,因为它已经连接了互联网.

我已经使用下面的代码来完成我的工作,但它似乎不适用于Android M.

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void setWifiInterfaceAsDefault() {
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkRequest.Builder builder = new NetworkRequest.Builder();
    NetworkRequest networkRequest= builder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .build();

    connectivityManager.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback());
}
Run Code Online (Sandbox Code Playgroud)

我还补充道

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
Run Code Online (Sandbox Code Playgroud)

在我的AndroidManifest.xml上,我确保自己Settings.System.canWrite(this)返回true但仍然没有.

提前致谢.

networking android android-wifi iot android-6.0-marshmallow

14
推荐指数
2
解决办法
3871
查看次数

使用.NET ThreadPool.QueueUserWorkItem的匿名代理

我打算发一个问题,但提前想出来并决定发布问题和答案 - 或者至少我的意见.

当使用匿名委托作为WaitCallback时,在foreach循环中调用ThreadPool.QueueUserWorkItem时,似乎将相同的一个foreach-value传递到每个线程.

List< Thing > things = MyDb.GetTheThings();
foreach( Thing t in Things)
{
    localLogger.DebugFormat( "About to queue thing [{0}].", t.Id );
    ThreadPool.QueueUserWorkItem(
        delegate()
        {
            try
            {
                WorkWithOneThing( t );
            }
            finally
            {
                Cleanup();
                localLogger.DebugFormat("Thing [{0}] has been queued and run by the delegate.", t.Id ); 
            }
        });
 }
Run Code Online (Sandbox Code Playgroud)

对于事物中的16个Thing实例的集合,我观察到传递给WorkWithOneThing的每个'Thing'对应于'things'列表中的最后一个项目.

我怀疑这是因为委托正在访问't'外部变量.请注意,我还尝试将Thing作为参数传递给匿名委托,但行为仍然不正确.

当我重新考虑代码以使用命名的WaitCallback方法并将Thing't'传递给方法时,瞧......事物的第一个实例被正确地传递给了WorkWithOneThing.

我想是平行学的一课.我还想象Parallel.For系列解决了这个问题,但是这个库不是我们的选择.

希望这能节省一些时间.

霍华德霍夫曼

c# closures

6
推荐指数
1
解决办法
9389
查看次数