简体   繁体   English

Android Studio 无法识别 AndroidManifest 中的使用权限

[英]Android Studio not recognizing uses-permission in the AndroidManifest

I am having problem where it seems my Android Studio is not recognizing the uses-permission in my AndroidManifest.xml file.我遇到了问题,我的 Android Studio 似乎无法识别我的 AndroidManifest.xml 文件中的使用权限。 In my main activity, when I try to call for some function that requires INTERNET and ACCESS_NETWORK_STATE, the activity seems to not recognize that I have already put the permission in the AndroidManifest.xml file.在我的主要活动中,当我尝试调用一些需要 INTERNET 和 ACCESS_NETWORK_STATE 的函数时,活动似乎没有识别出我已经将权限放入 AndroidManifest.xml 文件中。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

The following is the method that calls for the ACCESS_NETWORK_STATE.以下是调用 ACCESS_NETWORK_STATE 的方法。 The part when calling调用时的部分

public boolean isNetworkAvailable(Context context) {
        boolean isOnline = false;
        ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        try {
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
                NetworkCapabilities capabilities = manager.getNetworkCapabilities(manager.getActiveNetwork());
                isOnline = capabilities != null && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
            } else {
                NetworkInfo activeNetworkInfo = manager.getActiveNetworkInfo();
                isOnline = activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return isOnline;
    }

private void showConnectDialog() {
        Log.d(TAG, "showConnectDialog: trying to show the connect dialog");
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this,R.style.MyAlertDialogStyle);
        builder.setMessage("Please connect to the internet to proceed further")
                .setCancelable(false)
                .setPositiveButton("Connect", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int i) {
                        startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
                    }
                });
        builder.show();
    }

In my main activity oncreate:在我的主要活动 oncreate 中:

if (!isNetworkAvailable(MainActivity.this)){
            showConnectDialog();
        }
        if (isServicesOK()) {
            init();
        }

MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });
        AdView mAdView = findViewById(R.id.adViewMain);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);

You can see in the images (attached below) show that I have an error in my isNetworkAvailable method, and also my Google AdMob.您可以在图片(附在下面)中看到,我的 isNetworkAvailable 方法和 Google AdMob 都有错误。 If I hover my mouse on the error, Android Studio mentioned that I need to add ACCESS_NETWORK_STATE permission for the isNetworkAvailable method, and INTERNET permission for the Google AdMob.如果我将鼠标悬停在错误上,Android Studio 会提到我需要为 isNetworkAvailable 方法添加 ACCESS_NETWORK_STATE 权限,并为 Google AdMob 添加 INTERNET 权限。 But I already have them in my AndroidManifest.xml.但我的 AndroidManifest.xml 中已经有了它们。 Am I missing anything else?我还缺少什么吗? Thank you very much for your help.非常感谢您的帮助。

Error in Google AdMob Google AdMob 中的错误

Error in isNetworkAvailable method isNetworkAvailable 方法中的错误

Something might be wrong in your AndroidManifest.xml file.您的 AndroidManifest.xml 文件中可能有问题。 When you open the AndroidManifest.xml, click on the "Merged Manifest" button.当您打开 AndroidManifest.xml 时,单击“Merged Manifest”按钮。 It may show you if you have a problem in it.如果你有问题,它可能会告诉你。

I tried your code on my own and it runs successfully.我自己尝试了你的代码,它运行成功。 ;) ;)

package com.mansi.stackissue;

import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.MobileAds;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (!isNetworkAvailable(MainActivity.this)){
            showConnectDialog();
        }


        MobileAds.initialize(this, initializationStatus -> {
        });
        AdView mAdView = findViewById(R.id.adViewMain);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
    }

    public boolean isNetworkAvailable(Context context) {
        boolean isOnline = false;
        ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        try {
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
                NetworkCapabilities capabilities = manager.getNetworkCapabilities(manager.getActiveNetwork());
                isOnline = capabilities != null && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
            } else {
                NetworkInfo activeNetworkInfo = manager.getActiveNetworkInfo();
                isOnline = activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return isOnline;
    }

    private void showConnectDialog() {
        Log.d("TAG", "showConnectDialog: trying to show the connect dialog");
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this,R.style.Theme_AppCompat_DayNight_Dialog_Alert);
        builder.setMessage("Please connect to the internet to proceed further")
                .setCancelable(false)
                .setPositiveButton("Connect", (dialog, i) -> startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)));
        builder.show();
    }
}

Manifest File (Add your APP ID)清单文件(添加您的 APP ID)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mansi.stackissue">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<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/Theme.StackIssue">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="ca-app-pub-**********"/>
</application>

Layout file布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<com.google.android.gms.ads.AdView
    android:id="@+id/adViewMain"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ads:adSize="BANNER"
    ads:adUnitId="YOUR_UNIT_ID" />

</LinearLayout>

Please clean your project and re-build again.请清理您的项目并重新构建。 It will works.它会起作用。 Happy Coding!!编码快乐!!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM