2017-08-01 21 views
0

ブロードキャストレシーバクラスを使用してWiFi接続変更イベントを取得しようとしています。私はサムスンS7エッジとHTC 626Qでこれをテストして、それがうまくいきます(アプリケーションが閉じているときでも)。しかし、アプリケーションが閉じている場合、Huawei GR5 2017では動作しません。これは、アプリが画面上で実行されている場合にのみ機能します。 S7とGR5の両方のデバイスには、Android 7(Nougat)OSが搭載されています。一部のデバイスでブロードキャストレシーバが動作しない背景

ブロードキャストレシーバー

public class NetworkChangeReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context,intent.getAction(),Toast.LENGTH_SHORT).show(); 
    } 
} 

AndroidManifestファイル

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

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <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/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <receiver 
      android:name=".NetworkChangeReceiver" 
      android:enabled="true" 
      android:exported="true"> 
      <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
       <action android:name="android.net.wifi.STATE_CHANGE" /> 
       <action android:name="android.net.nsd.STATE_CHANGED" /> 
       <action android:name="android.net.wifi.NETWORK_IDS_CHANGED" /> 
       <action android:name="android.net.wifi.STATE_CHANGE" /> 
       <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
       <action android:name="android.net.wifi.p2p.CONNECTION_STATE_CHANGE" /> 
       <action android:name="android.net.wifi.p2p.DISCOVERY_STATE_CHANGE" /> 
       <action android:name="android.net.wifi.p2p.PEERS_CHANGED" /> 
       <action android:name="android.net.wifi.p2p.STATE_CHANGED" /> 
       <action android:name="android.net.wifi.p2p.THIS_DEVICE_CHANGED" /> 
       <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" /> 
       <action android:name="android.net.wifi.supplicant.STATE_CHANGE" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

私が本サービスを利用することができます知っているが、私はすべてのデバイスのためのブロードキャストレシーバーを使用することができればいいだろう。 "Broadcast Receiver not working background"について多くの質問がありましたが、私の質問に対する回答が見つかりませんでした。 なぜこれが起こり、これを克服する方法がありますか(ブロードキャストレシーバの使用のみ)?

答えて

1

"保護された"アプリのリスト、またはバックグラウンドで実行が許可されているアプリのリストにアプリを追加する必要があるかもしれません。多くのローエンド端末やXiaomi、Huaweiなどの端末では、明示的にこのリストに追加されていない限り、Androidは自動的にアプリを起動(または再起動)しません。バッテリ、電源管理、またはセキュリティの設定を参照してください。

+0

ありがとう:

は、詳細は以下を参照してください。これはいくつかのHuaweiデバイスで機能しましたが、Huawei GR5 2017にはこの「保護されたアプリケーション」機能はありません。 – kmchmk

+0

私は最終的にHuawei GR5 2017(Nougat)モデルでこれを解決する方法を見つけました。 設定 - >アプリ - >設定アイコン - >特別なアクセス - >最適化を無視 - >すべてのアプリ - >(アプリを選択) - >許可 – kmchmk

+0

おっと! :-(それは直感的ではありません! –

関連する問題