0

首先我使用API​​ 23而不是android N,所以android.net.conn.CONNECTIVITY_CHANGE应该仍然适用于我,但它不。连接变更接收器不起作用?

清单:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="enis.example.com.connectivitytest"> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

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

     <receiver android:name="com.connectivitytest.ConnectionChangeReceiver" 
      android:label="NetworkConnection"> 
      <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

ConnectionChangeReceiver

package com.connectivitytest; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.util.Log; 
import android.widget.Toast; 


public class ConnectionChangeReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); 
     NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo( ConnectivityManager.TYPE_MOBILE); 
     if (activeNetInfo != null) 
     { 
      Toast.makeText(context, "Active Network Type : " + activeNetInfo.getTypeName(), Toast.LENGTH_LONG).show(); 
       Log.v("Active Network Type : ", activeNetInfo.getTypeName()); 

     } 
     if(mobNetInfo != null) 
     { 
      Toast.makeText(context, "Mobile Network Type : " + mobNetInfo.getTypeName(), Toast.LENGTH_LONG).show(); 

     }    Log.v("Mobile Network Type : ", activeNetInfo.getTypeName()); 



    } 
} 

没有敬酒任何消息,所以我增加了日志信息仅仅是明确的,但没有出现在logcat的无论是。 我甚至尝试下面的代码:https://gist.github.com/mjohnsullivan/1fec89187b1274dc256e 但它是完全一样的,没有错误,但没有任何反应,没有面包的消息,也没有日志消息

+0

https://stackoverflow.com/a/17181263/115145 – CommonsWare

+0

我读过那个地方,但我不能完全理解它。我的意思是有一个接收器的要点是在后台做事情,现在我在前台运行一个活动?如果除了网络可用时应该运行的任务,我不需要其他任何东西?开始时我在活动中写什么?以及它是如何工作的,接收机是否会侦听可用的网络,然后运行该活动?我很抱歉,但我很困惑。 –

回答

1

我的意思是具有接收器的全部意义在于做事情的背景,现在我在前台运行一个活动?

用户需要运行活动一次,将您的应用程序出了所谓的“停止状态”,你的应用程序放置到安装之后。此后,当你打算,直到你的接收器将工作:

  • 用户卸载你的应用程序,或
  • 用户进入设置,在列表中查找您的应用程序,并单击“强制停止”按钮

在后一种情况下,您的应用程序将返回到停止状态,并且您的接收器将不再工作,直到用户再次启动您的活动为止。

如果我除了在有网络时应该运行的任务不需要其他任何东西,该怎么办?

最有可能的是,您的应用程序的行为有些方面需要用户配置。而且,为此,用户将需要一个用户界面。

我在活动中写什么?

如果没有别的,如果您打算在Play商店发货,则需要您的隐私政策。