我正在尝试使用SDK 26在我的android手机上的android应用程序中请求互联网许可。我已经尝试使用AndroidManifest.xml
,已经尝试使用ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.INTERNET }, 1);
,并且尝试了不同的请求代码。我已经在onCreate
和按钮按下事件中尝试过此操作,但是进入“应用信息”时仍然没有权限显示。
我完全迷失了,因为我看不到任何原因无法正常工作。有任何想法吗?我不知道的常见问题?
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.simplevents">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
答案 0 :(得分:2)
权限分为几个保护级别
有三种影响第三方应用程序的保护级别:正常,签名和危险权限
INTERNET
权限属于正常保护级别,这就是为什么不需要在运行时询问
请参阅列表here
什么是正常和危险权限?
普通:
对用户不敏感和有害的权限,例如例如 VIBRATE 和 INTERNET
危险:
敏感和有害的权限,例如允许 READ_CONTACTS 之后,应用程序可能会滥用您的联系人详细信息或允许 READ_EXTERNAL_STORAGE 可以访问您的SD卡数据
答案 1 :(得分:0)
Internet 权限为“普通”权限,此权限由Android系统自动允许。
只有运行时权限才需要CALL_LOG,SMS等敏感权限。
尝试
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
如果您正在使用移动数据,则仅需要INTERNET权限 但是如果您使用Wi-Fi或其他网络,则需要ACCESS_NETWORK_STATE权限,
注意-不需要运行时权限的网络权限。
答案 2 :(得分:0)
您不需要Internet的特殊权限。
只需在清单中定义权限
<uses-permission android:name="android.permission.INTERNET" />
出于测试目的,您可以检查您的互联网连接,并在Android Manifest文件中添加以下权限。此权限为您提供Internet连接的状态(状态)。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
您可以在此处使用测试代码来检查您的互联网连接。如果互联网服务正常运行,则isNetwork函数返回true,否则返回false。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main)
if (isNetwork(getApplicationContext())){
Toast.makeText(getApplicationContext(), "Internet Connected", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(getApplicationContext(), "Internet Connected", Toast.LENGTH_SHORT).show()
}
}
public boolean isNetwork(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
}
答案 3 :(得分:0)
由于其他人已经竭尽全力回答这个问题,因此我不再允许删除该问题,我将向您解释我的错误。我一直都获得互联网访问权限-因此我的代码有完全不同的错误,我误解了错误消息,并认为这是权限问题,因为互联网权限未显示在应用程序信息中屏幕。它从来没有做过,因为这不是我所学到的“危险”许可。
总结:在Android上获得在互联网上建立连接的权限就像在AndroidManifest.xml
中添加权限一样简单。