Android 6.0中的ConnectionManager.requestNetwork
我正在尝试使用Android 6.0中的ConnectionManager.requestNetwork,android,android-6.0-marshmallow,Android,Android 6.0 Marshmallow,我正在尝试使用ConnectivityManager.requestNetwork(NetworkRequest,ConnectivityManager.NetworkCallback)获取新的ConnectivityManager.bindProcessToNetwork(网络) 原因是为了迫使应用程序在某些特定的网络中调用未来的请求,这些网络没有互联网连接(这是一个本地硬件通信网络)。此时,系统通过3G/4G网络发送请求,但从未到达所需的Wifi网络,因为该网络不响应android呼叫 调用
ConnectivityManager.requestNetwork(NetworkRequest,ConnectivityManager.NetworkCallback)
获取新的ConnectivityManager.bindProcessToNetwork(网络)
原因是为了迫使应用程序在某些特定的网络中调用未来的请求,这些网络没有互联网连接(这是一个本地硬件通信网络)。此时,系统通过3G/4G网络发送请求,但从未到达所需的Wifi网络,因为该网络不响应android呼叫
调用requestNetwork
方法时,收到以下错误:
java.lang.SecurityException: com.xyz.app was not granted either of these permissions: android.permission.CHANGE_NETWORK_STATE, android.permission.WRITE_SETTINGS.
我尝试调用新方法来请求Android 6.0中可用的权限:
requestPermissions(new String[]{Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS}, PERMISSIONS_REQUEST_WIFI);
但是回调总是PackageManager.PERMISSION\u DENIED
我将这两个权限都放在了AndroidManifest.xml
中,但没有成功
注意:
Manifest.permission.WRITE\u设置不在列表中 我不确定这是否是谷歌的意图,但以下是我看到的行为:
CHANGE\u NETWORK\u STATE
似乎总是被拒绝(如评论中所述,这是一种签名许可),但这似乎并不重要。我的ConnectivityManager
网络请求似乎都是由WRITE\u SETTINGS
限制的-因此,如果您有WRITE\u SETTINGS
您不需要更改网络状态
如注释中所述,您的操作与其他权限不同,使用:
Intent goToSettings = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
goToSettings.setData(Uri.parse("package:" + Context.getPackageName()));
startActivity(goToSettings);
在那之后,我的ConnectivityManager
网络请求非常好
要在调用操作\u管理\u写入\u设置
活动之前检查权限是否已授予,此答案的解决方案是使用
更新:从Android 6.0.1开始,CHANGE\u NETWORK\u STATE
在清单文件中请求时自动授予。上述WRITE\u设置
检查仅适用于6.0这是一个Android 6.0错误。安卓6.0.1中对此进行了修复,如果您在清单中请求更改网络状态,则可以调用requestNetwork()
。无需调用requestPermissions()
,这是正常的权限 事实上,这两个权限中没有一个被标记为“危险”。不知道为什么它不起作用。但您的“连接检查”代码链接似乎已断开,因此我无法查看它。@shkschneider实际上我在日志中看到了每个连接网络的链接。这个结果是一个简单的空白页。也许这可以进行日常更改…WRITE\u设置
通过处理。关于改变网络状态
,我不确定这是怎么回事——医生们声称这是正常的
,但我装备了6.0的Nexus 5说这是签名
@shkschneider:对不起,我不知道你的意思。您不能使用签名
权限,除非您使用的签名密钥与使用该权限进行自卫的任何人相同,或者除非存在其他机制(例如写入设置
和系统警报窗口
现在是如何处理的)。@Rupali看看官方ROM中的状态如何?它可以工作,谢谢你的回答!但是我注意到,即使用户手动接受WRITE\u设置
权限,下次我启动相同的活动时,权限的结果仍然标记为permission\u DENIED
。在再次调用Intent之前,我需要应用这个解决方案(当它已经启用时,避免转到设置),这在Android 6.0.1中不再需要<代码>写入设置
和更改网络状态
不再是一回事了。很好,听起来真不错!我将查看我的源代码并升级到6.0.1并检查它!谢谢