我需要检测Android设备是否已连接到Internet.
本NetworkInfo
类提供了一个非静态方法isAvailable()
听起来很完美.
问题是:
NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
抛出此错误:
The constructor NetworkInfo is not visible.
Run Code Online (Sandbox Code Playgroud)
安全的赌注是有另一个类返回一个NetworkInfo
对象.但我不知道哪个.
我想创建一个使用互联网的应用程序,我正在尝试创建一个检查连接是否可用的功能,如果不可用,请转到具有重试按钮和解释的活动.
附件是我的代码到目前为止,但我收到了错误 Syntax error, insert "}" to complete MethodBody.
现在我一直把这些放在试图让它工作,但到目前为止没有运气...任何帮助将不胜感激.
public class TheEvoStikLeagueActivity extends Activity {
private final int SPLASH_DISPLAY_LENGHT = 3000;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
private boolean checkInternetConnection() {
ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);
// ARE WE CONNECTED TO THE NET
if (conMgr.getActiveNetworkInfo() != null
&& conMgr.getActiveNetworkInfo().isAvailable()
&& conMgr.getActiveNetworkInfo().isConnected()) {
return true;
/* New Handler to start the Menu-Activity
* and close this Splash-Screen after …
Run Code Online (Sandbox Code Playgroud) 我想知道以编程方式注册广播接收器的最佳实践/方法是什么.我想根据用户的选择注册特定的接收器.
由于注册是通过清单文件完成的,我想知道是否有一种正确的方法可以在代码中实现这一点.
我使用最新版本的Google Play服务(7.0)并按照其指南中给出的步骤操作,并启用了如下所示的位置对话框,其中包含"从不"按钮.我的应用程序强制要求位置,所以我不想向用户显示永远不会,因为一旦用户点击"从不",我就无法再获取位置或请求位置.
谷歌地图只有是和没有按钮没有从不按钮,任何想法如何实现相同?
我的应用程序的图像
谷歌地图的形象
Intent ACTION_XXX
当有Internet连接时,是否有Android 通知我?
我想实例化BroadcastReceiver
当用户启用Internet连接时通知我的应用程序(通过wifi,通过GSM等)
谁能帮助我?
我已经有了这个代码来监听连接变化 -
public class NetworkStateReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
Log.d("app","Network connectivity change");
if(intent.getExtras() != null)
{
NetworkInfo ni = (NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
if(ni != null && ni.getState() == NetworkInfo.State.CONNECTED)
{
Log.i("app", "Network " + ni.getTypeName() + " connected");
}
}
if(intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE))
{
Log.d("app", "There's no network connectivity");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我使用此代码检查Internet连接 - Internet Check
但问题是,如果网络在没有任何连接变化的情况下突然失去互联网连接,则此代码无用.有没有办法为Internet连接更改创建Broadcast Receiver侦听器?我有一个Web应用程序,突然的Internet连接更改可能会导致问题.
我只是尝试这个小样本项目,它所做的一切:活动一有一个发送广播的按钮.活动二在收到时显示祝酒词.下面是代码,从未收到广播.我做错了什么?
发送广播
public class SendBroadcast extends Activity {
public static String BROADCAST_ACTION = "com.unitedcoders.android.broadcasttest.SHOWTOAST";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void sendBroadcast(View v){
Intent broadcast = new Intent();
broadcast.setAction(BROADCAST_ACTION);
sendBroadcast(broadcast);
}
}
Run Code Online (Sandbox Code Playgroud)
接收它
public class ToastDisplay extends Activity {
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(getApplicationContext(), "received", Toast.LENGTH_SHORT);
}
};
@Override
protected void onResume() {
IntentFilter filter = …
Run Code Online (Sandbox Code Playgroud) 我正试图获得用户连接到网络的那一刻,然后我认为这BroadcastReceiver
是一个很好的方法......我想做的事情是,当用户连接到网络时,知道该网络是否已连接到Internet .
主要的是知道WiFi是否需要Browse Log in
示例:Handling Network Sign-On
文档
我把我BroadcastReceiver
变成了这个
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
NetworkInfo networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (networkInfo != null && networkInfo.getDetailedState() == NetworkInfo.DetailedState.CONNECTED) {
Log.d("Network", "Internet YAY");
} else if (networkInfo != null && networkInfo.getDetailedState() == NetworkInfo.DetailedState.DISCONNECTED) {
if (isNetworkOnline()) {
Log.d(TAG, String.valueOf(tikis));
NetTask TeInternet = new NetTask();
TeInternet.execute("https://www.google.com");
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试连接到WiFi
没有Internet Connection
输入的是这样的:
D/Network? Internet YAY
D/Network? Internet YAY
D/Network? Internet YAY
D/RequiresLoginBroadcast? 1 //this occurs sometimes …
Run Code Online (Sandbox Code Playgroud) 我使用以下代码通过我的应用程序检查互联网连接.
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_SHORT ).show();
}
if(mobNetInfo != null)
{
Toast.makeText( context, "Mobile Network Type : " +
mobNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已在清单文件中定义了必需的权限.
每当我试图断开/连接使用F8键,我会收到网络"不幸的是APP已经停止",而我没有得到任何打印logcat
.
我能知道我在做什么错吗?
我一直在努力解决在某些条件下限制Crashlytics网络使用的问题.例如 - 漫游,计量网络等等.
根据SDK文档,我发现只有两个选项可以解决这个问题:
只需不初始化Crashlytics即可在运行时"退出"
发送崩溃报告之前内置用户同意对话框
这个API非常有限,因为:
不初始化Crashlytics不仅会阻止网络访问,还会阻止任何机会Crashlytics在本地保存崩溃报告,以便最终发送事件.更不用说除了粗暴地重写Thread.setUncaughtExceptionHandler之外没有好的方法可以在运行时选择退出
如果在后台发生崩溃,则同意对话框对用户没有任何意义.
我的问题基本上是:我错过了什么?有没有办法限制Crashlytics网络访问?
我的动机来自需要防止我的应用程序使用网络带宽可能会在某些条件下花费给用户的钱,尽管"蜂窝网络"或"使用漫游时使用数据"设备设置已启用.