SecurityException:権限が拒否されました(インターネット権限がありませんか?)


92

このエラーは本当に奇妙で、再現方法と修正方法がわかりません。多くの検索を実行したため、何も役に立たなかったためです。

ここにスタックトレースがあります:

Stack Trace
_________________________________
0   java.lang.RuntimeException: An error occured while executing doInBackground()
1       at android.os.AsyncTask$3.done(AsyncTask.java:299)
2       at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
3       at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
4       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
5       at java.util.concurrent.FutureTask.run(FutureTask.java:137)
6       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
7       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
8       at java.lang.Thread.run(Thread.java:856)
9   Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
10      at java.net.InetAddress.lookupHostByName(InetAddress.java:430)
11      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
12      at java.net.InetAddress.getAllByName(InetAddress.java:214)
13      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
14      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
15      at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
16      at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
17      at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
18      at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
19      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
20      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
21      at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
22      at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
23      at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
24      at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185)
25      at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
26      at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143)
27      at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982)
28      at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211)
29      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28)
30      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1)
31      at android.os.AsyncTask$2.call(AsyncTask.java:287)
32      at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
33      ... 4 more
34  Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
35      at libcore.io.Posix.getaddrinfo(Native Method)
36      at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
37      at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
38      ... 26 more
39  Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
40      ... 29 more
41  java.lang.SecurityException: Permission denied (missing INTERNET permission?)
42      at java.net.InetAddress.lookupHostByName(InetAddress.java:430)
43      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
44      at java.net.InetAddress.getAllByName(InetAddress.java:214)
45      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
46      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
47      at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
48      at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
49      at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
50      at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
51      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
52      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
53      at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
54      at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
55      at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
56      at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185)
57      at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
58      at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143)
59      at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982)
60      at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211)
61      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28)
62      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1)
63      at android.os.AsyncTask$2.call(AsyncTask.java:287)
64      at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
65      at java.util.concurrent.FutureTask.run(FutureTask.java:137)
66      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
67      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
68      at java.lang.Thread.run(Thread.java:856)
69  Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
70      at libcore.io.Posix.getaddrinfo(Native Method)
71      at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
72      at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
73      ... 26 more
74  Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
75      ... 29 more
76  libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
77      at libcore.io.Posix.getaddrinfo(Native Method)
78      at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
79      at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
80      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
81      at java.net.InetAddress.getAllByName(InetAddress.java:214)
82      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
83      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
84      at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
85      at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
86      at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
87      at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
88      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
89      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
90      at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
91      at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
92      at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
93      at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185)
94      at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
95      at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143)
96      at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982)
97      at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211)
98      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28)
99      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1)
100     at android.os.AsyncTask$2.call(AsyncTask.java:287)
101     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
102     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
103     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
104     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
105     at java.lang.Thread.run(Thread.java:856)
106 Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
107     ... 29 more
108 libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
109     at libcore.io.Posix.getaddrinfo(Native Method)
110     at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
111     at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
112     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
113     at java.net.InetAddress.getAllByName(InetAddress.java:214)
114     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
115     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
116     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
117     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
118     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
119     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
120     at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
121     at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
122     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
123     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
124     at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
125     at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185)
126     at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
127     at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143)
128     at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982)
129     at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211)
130     at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28)
131     at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1)
132     at android.os.AsyncTask$2.call(AsyncTask.java:287)
133     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
134     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
135     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
136     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
137     at java.lang.Thread.run(Thread.java:856)

これが私のAndroidManifest.xmlです

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="my_app_package"
    android:installLocation="auto"
    android:versionCode="my_version_code"
    android:versionName="my_version_name" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:resizeable="true"
        android:smallScreens="true"
        android:xlargeScreens="true" />

    <uses-feature android:glEsVersion="0x00010001" />

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

    <application
        android:allowTaskReparenting="true"
        android:debuggable="true"
        android:icon="@drawable/mxm_icon"
        android:label="@string/musicbrowserlabel"
        android:theme="@style/Theme.Music" >

        <!-- MY ACTIVITIES -->



    </application>

</manifest>

このアプリは2年以上市場に出回っているので、マニフェストで正しいインターネット権限を持っているかどうかを尋ねる気にしないでください:P

(Crittercismからの)すべてのバグがAndroid 4.1.xバージョン(JB)に起因していることにも気付きました。デバイスがルート化されているかどうか、または何がわからないか(現時点ではこの情報が表示されません)


ホスト名が変更された可能性があります(このエラーメッセージが原因で):ホスト名に関連付けられたアドレスがない
Opiatefuchs

異なるバージョンのデバイスで試しましたか?または各バージョンに乗りますか?
Pankaj Kumar 2013

1
plz add <uses-permission android:name = "android.permission.INTERNET" /> <uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />外部<Application>タグプロジェクトを再ビルドして実行してください。それは私のために働いた
アザハール'19

ちなみに順序は重要です、stackoverflow.com
questions / 25135595

@SteErMiあなたはこの問題を解決しましたか、私は同じ状況に直面しています
Ravind Maurya

回答:


118

注:この回答は2013年6月に書いたので、今日は少し日付が遅れています。バージョン6(Marshmallow)以降、Androidプラットフォームで多くの変更が行われ、問題全体が廃止されました。ただし、この投稿は、一般的な問題分析アプローチの例として、一読に値すると思います。


発生している例外(SecurityException: Permission denied (missing INTERNET permission?))は、ネットワーク接続が許可されていないことを明確に示しています。それはかなり疑う余地のない事実です。しかし、これはどのようにして起こりますか?通常、これはファイルの<uses-permission android:name="android.permission.INTERNET" />エントリが欠落していることが原因であるAndroidManifest.xmlか、実行時にではなくインストール時にインターネットのアクセス許可が付与されているため、Androidフレームワークの長い間見逃されていたバグが原因でアプリが正常にインストールされましたが、予期しないアクセス許可が付与されていません。

私のマニフェストは正しいので、これはどのようにして起こりますか?

理論的にはuses-permission、マニフェストに存在することが要件を完全に満たし、開発者の観点からは、ネットワーキングを行うために実行する必要があるすべてです。さらに、インストール中に権限がユーザーに表示されるため、アプリがユーザーのデバイスへのインストールを終了したという事実は、ユーザーが要求したものを許可したことを意味します(そうでない場合、インストールはキャンセルされます)。したがって、コードが実行された場合、要求されたすべての権限は付与は有効です。一度付与されると、ユーザーはアプリを完全にアンインストールする以外の方法で権限を取り消すことはできません。これは、標準のAndroidフレームワーク(AOSPから)が現時点でそのような機能を提供していないためです。

しかし、ルート化されたデバイス上でアプリを実行することも気にしないと、事態はさらに難しくなります。ユーザーがインストールできるGoogle Playで利用可能なツールがあり、実行時にインストール済みアプリに付与される権限を制御できますたとえば、権限拒否などです。これは、さまざまなタイプの「プライバシーマネージャ」または同様のツールを備えたCyanogenMod、ベンダーブランド(LGなど)またはその他のカスタムROMでも実行できます。

したがって、アプリがいずれかの方法でブロックされている場合、それは基本的にユーザーによって意図的にブロックされており、そうである場合、それはこの場合本当にユーザーの問題です(または特定のオプション/ツールが実際に何をし、結果がどうなるかを理解していません)標準のSDK(およびほとんどのアプリはそのSDKを念頭に置いて記述されている)は単にそのように動作しないためです。だから私この問題が「標準」の根ざしていないデバイスに在庫がある(またはSamsung、HTC、Sonyなどのベンダーの)ROMで発生することを強く疑います。

クラッシュしたくない...

適切に実装された権限管理および/または組織のブロックは、特定の機能へのアクセスが許可されていると同時にアクセスできない状況にほとんどのアプリが対応できない可能性があるという事実に対処する必要があります。これは、アプリがマニフェストを使用する一種の矛盾ですインストール時にアクセスを要求します。アクセス制御が正しく行われると、すべてのものが以前と同じように機能し、機能の期待される動作の範囲内でテクニックを使用してユーザビリティを制限する必要があります。たとえば、特定の許可(つまり、GPS、インターネットアクセス)が許可されている場合、そのような機能はアプリ/ユーザーの観点から利用できるようにできます(つまり、GPSをオンにするか、接続を試みることができます)、変更された実装は実際のデータを提供できません-つまり、屋内にいるときや衛星が「固定」されていないときなど、GPSは常に座標を返すことができません。以前と同様にインターネットアクセスを許可できます。ただし、データカバレッジやルーティングがないため、正常に接続できません。このようなシナリオは、通常の使用でも想定されているため、アプリですでに処理されているはずです。これは単に通常の毎日の使用中に発生する可能性があるため、このような状況でのクラッシュは、アプリケーションのバグに関連している可能性が高いです。

この問題が発生する環境に関する情報が不足しているため、推測せずに問題を診断できませんが、解決策の1つとして、setDefaultUncaughtExceptionHandler()を使用して将来このような予期しない例外をキャッチし、ユーザーにどのようなアクセス許可を詳細に表示するかを検討することができます。単にクラッシュするのではなく、アプリが必要です。これを使用すると、Crittercism、ACRAなどのツールと競合する可能性が高いことに注意してください。これらのいずれかを使用する場合は注意してください。

ノート

android.permission.INTERNETネットワーキングを正常に行うためにマニフェストで宣言する必要があるのは、ネットワーキング関連の唯一の権限ではないことに注意してください。持つINTERNETだけで付与された権限は、(基本的には任意のネットワークのデータ転送を行うための基本的な要件である)オープンネットワークソケットへの応用が可能になります。ただし、ネットワークスタック/ライブラリがネットワークに関する情報も取得したい場合android.permission.ACCESS_NETWORK_STATEは、マニフェストにも必要です(つまり、HttpUrlConnectionクライアントで必要です(チュートリアルを参照))。


補遺(2015-07-16)

Android 6(別名Marshmallow)には、ランタイムアクセス許可と呼ばれるまったく新しいアクセス許可管理メカニズムが導入されていることに注意してください。これにより、ユーザーはどの許可を付与するかをより詳細に制御できます(選択的な付与も可能です)、またはアプリの削除の必要なしに、すでに許可されている許可を取り消すことができます。

この[...]は、新しいパーミッションモデルを導入し、ユーザーは実行時にアプリのパーミッションを直接管理できるようになりました。このモデルにより、ユーザーは可視性と権限の制御が向上し、アプリ開発者のインストールと自動更新のプロセスが合理化されます。ユーザーは、インストールされているアプリに対して個別に権限を付与または取り消すことができます。

ただし、変更は影響しませんINTERNETACCESS_NETWORK_STATE「ノーマル」の権限を考えられている権限、。ユーザーはこれらの権限を明示的に付与する必要はありません。

詳細については、動作変更の説明ページを参照し、アプリが新しいシステムでも正しく動作することを確認してください。プロジェクトがtargetSdk少なくとも新しい権限モデル(詳細なドキュメント)をサポート23する必要がある場合に設定する場合、これは特に重要です。準備ができていない場合は、アプリのインストール時に新しいAndroidでも古い権限システムを使用できるようにするため、多くてもそれを守ってください。targetSdk22


これは明らかに彼がネットワーキングを行うことを許可されていないことを意味します。これは、マニフェストで要求されていないか、プラットフォームによって許可されていません(つまり、ルート化されたデバイスで実行できます)。
Marcin Orlowski 2013年

2
他の誰かからの反対投票を取り消すためにこの回答に賛成しました。最初、私はあなたが実際に質問全体を読んでおらず、速くしたいだけだと思っていました(ところで、あなたの答えは最初は本当に短すぎました;-))、私は(ルート化されたデバイス上の)ユーザーについての発言だと思いますあなたの許可リクエストを阻止できることは良いことでした。
バスク2013年

うーん、これが権限を削除しているrootユーザーからのものである場合、私は2つの質問をします。2)もう一度質問するにはどうすればよいですか?(それでも、この種の問題について話しているのかどうかはわかりません)
StErMi 2013年

この権限は実行時に付与されないため、再度要求することはできません。考えられる「解決策」については編集された回答を参照してください
Marcin Orlowski 2013年

1
同じです:ダウングレードしようとしていましたが、答えの2番目の部分は読む価値のある部分のようです:)回答の最初の行を削除する必要があります。
ティエリー

43

追加する場所が

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

は正しい。

あなたはそれをAndroidManifest.xmlでそのように書くべきです:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.project"> 
<uses-permission android:name="android.permission.INTERNET"/>

私の間違いをしないでください:)


33

Android Studio 1.3b1(他のバージョンについては不明)は、へのインターネット権限をオートコンプリートしましたANDROID.PERMISSION.INTERNET。それを変更してandroid.permission.INTERNET問題を修正しました。


これはAndroid Studio 1.4 RC 1で修正されているはずです(現在はCanaryチャネルにあります)。
トム

30

次の行をマニフェストファイルに追加します。

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

それは私のためにそれを修正しました。


20

このエラーを解決しました。誤ってApplicationタグ内に権限を追加していました。私は外に置いた、それはうまくいきます。それが誰かのために役立つことを願っています。


16

私もこの問題を抱えていました。それが私のロリポップエミュレーターでは機能したが、実際のキットカットデバイスでは機能しなかったのは奇妙でした。

Android Studioは、アクセス許可を大文字で書くように強制しますが、それが問題です。

追加

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

アプリケーションタブの上で、それは動作します。


これがシンプルで正しい答えです。そして、一番上になるはずです!
コスタノス

13

以下に示すように、アプリケーションタグの前に許可を記述します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.someapp.sample">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

これは実際に私を助けてくれ:(全ての直感的ではありません唯一のものだった。
イワン・ペレス

4

これらの許可を<application>タグの外側の望ましいタグの外側に置いて、私はそれを試しましたが、それは私にとってはうまくいきます。

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


2

トムが言ったように。あなたが資本から始めるときA、オートコンプリートはそれをそのまま完成させます。

ANDROID.PERMISSION.INTERNET

で入力を開始するとa、オートコンプリートは次のように完了します

android.permission.INTERNET

2番目は正しいものです。


2

私はこの問題の解決策を探すのに何時間も費やしましたが、答えの解決策はどれもうまくいきませんでした。次に、オートコンプリート中にandroid.permission.INTERNETとの間に誤ってスペースを追加したことがわかりました"


0

まあそれは非常に紛らわしい種類のバグです。多くの理由が考えられます。

  1. あなたは正しい場所での権限に言及していません。アプリケーションの真上。
  2. 小文字は使用していません。
  3. 場合によっては、ネットワーク状態のアクセス許可も追加する必要があります。
  4. 私の場合、マニフェスト行に空白行がいくつかあります。許可タグとアプリケーション行の間に空白行があるかもしれません。それらを削除すれば完了です。それが役に立てば幸い

-7

これをマニフェストファイルから削除します

 xmlns:tools="http://schemas.android.com/tools"

問題のマニフェストファイル(AndroidManifest.xml)にそのようなコードはありません。
2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.