请求互联网许可不起作用
requesting internet permission not working
我正在尝试使用 SDK 26 在我的 android phone 上的 android 应用程序中请求互联网许可。我已经尝试使用 AndroidManifest.xml
,我我试过使用 ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.INTERNET }, 1);
并且尝试了不同的请求代码。我已经在 onCreate
和按钮按下事件中尝试过这个,但是当我进入应用程序信息时仍然没有显示任何权限。
我完全迷失了,因为我看不出有任何原因这不起作用。有任何想法吗?我还不知道的常见问题?
andoidManifest.xml
<?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>
权限分为几个保护级别
影响第三方应用程序的保护级别分为三个:正常、签名和危险 权限
INTERNET
权限进入 正常保护 级别,这就是为什么不需要在运行时询问的原因
查看列表here
什么是正常和危险权限?
正常:
不敏感且对用户有害的权限,例如。比如 VIBRATE 和 INTERNET
危险:
允许READ_CONTACTS后敏感和有害的权限,该应用程序可能会滥用您的联系人详细信息或允许READ_EXTERNAL_STORAGE 可以访问您的 SD 卡数据
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 权限,
注意 - 网络权限不需要运行时间权限。
您不需要特殊的 Internet 权限。
只需在清单中定义权限
<uses-permission android:name="android.permission.INTERNET" />
出于测试目的,您可以检查您的互联网连接,在 Android 清单文件中添加以下权限。此权限为您提供互联网连接的状态(状态)。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
您可以使用此处的测试代码检查您的互联网连接。 isNetwork 函数 return 如果互联网服务正常,则为真,否则 return 为假。
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 Is Not 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;
}
}
由于其他人已经努力回答了这个问题,所以我不能再删除这个问题,我会向你解释我的错误是什么。我确实一直都拥有互联网访问权限 - 所以我的代码中有一个完全不同的错误,我误解了错误消息并认为这是一个权限问题,因为互联网权限没有显示在应用程序信息中屏幕。它从来没有,因为它不是 'dangerous' 许可,我学到了这么多。
总而言之:获得在 android 上建立互联网连接的权限就像在 AndroidManifest.xml
中添加权限一样简单。
我正在尝试使用 SDK 26 在我的 android phone 上的 android 应用程序中请求互联网许可。我已经尝试使用 AndroidManifest.xml
,我我试过使用 ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.INTERNET }, 1);
并且尝试了不同的请求代码。我已经在 onCreate
和按钮按下事件中尝试过这个,但是当我进入应用程序信息时仍然没有显示任何权限。
我完全迷失了,因为我看不出有任何原因这不起作用。有任何想法吗?我还不知道的常见问题?
andoidManifest.xml
<?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>
权限分为几个保护级别
影响第三方应用程序的保护级别分为三个:正常、签名和危险 权限
INTERNET
权限进入 正常保护 级别,这就是为什么不需要在运行时询问的原因
查看列表here
什么是正常和危险权限?
正常:
不敏感且对用户有害的权限,例如。比如 VIBRATE 和 INTERNET
危险:
允许READ_CONTACTS后敏感和有害的权限,该应用程序可能会滥用您的联系人详细信息或允许READ_EXTERNAL_STORAGE 可以访问您的 SD 卡数据
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 权限,
注意 - 网络权限不需要运行时间权限。
您不需要特殊的 Internet 权限。
只需在清单中定义权限
<uses-permission android:name="android.permission.INTERNET" />
出于测试目的,您可以检查您的互联网连接,在 Android 清单文件中添加以下权限。此权限为您提供互联网连接的状态(状态)。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
您可以使用此处的测试代码检查您的互联网连接。 isNetwork 函数 return 如果互联网服务正常,则为真,否则 return 为假。
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 Is Not 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;
}
}
由于其他人已经努力回答了这个问题,所以我不能再删除这个问题,我会向你解释我的错误是什么。我确实一直都拥有互联网访问权限 - 所以我的代码中有一个完全不同的错误,我误解了错误消息并认为这是一个权限问题,因为互联网权限没有显示在应用程序信息中屏幕。它从来没有,因为它不是 'dangerous' 许可,我学到了这么多。
总而言之:获得在 android 上建立互联网连接的权限就像在 AndroidManifest.xml
中添加权限一样简单。