Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 6.0中的ConnectionManager.requestNetwork_Android_Android 6.0 Marshmallow - Fatal编程技术网

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并检查它!谢谢