相关疑难解决方法(0)

如何检查Android上的互联网访问?InetAddress永远不会超时

我有一个AsyncTask应该检查网络访问主机名.但是doInBackground()永远不会超时.有人有线索吗?

public class HostAvailabilityTask extends AsyncTask<String, Void, Boolean> {

    private Main main;

    public HostAvailabilityTask(Main main) {
        this.main = main;
    }

    protected Boolean doInBackground(String... params) {
        Main.Log("doInBackground() isHostAvailable():"+params[0]);

        try {
            return InetAddress.getByName(params[0]).isReachable(30); 
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;       
    }

    protected void onPostExecute(Boolean... result) {
        Main.Log("onPostExecute()");

        if(result[0] == false) {
            main.setContentView(R.layout.splash);
            return;
        }

        main.continueAfterHostCheck();
    }   
}
Run Code Online (Sandbox Code Playgroud)

networking android asynchronous

637
推荐指数
27
解决办法
45万
查看次数

不推荐使用ConnectivityManager getNetworkInfo(int)

使用compileSdkVersion 23,但是尝试支持9到9.

getNetworkInfo(int)在23中已弃用.建议改为使用getAllNetworks和getNetworkInfo(Network).然而,这两者都需要最少的API 21.

我们可以在支持包中使用哪个类可以帮助解决这个问题吗?

我知道之前提出了一个解决方案,但是我对9的最小api要求的挑战造成了问题.

networking android android-6.0-marshmallow android-connectivitymanager

122
推荐指数
9
解决办法
7万
查看次数

当app被杀/在后台时,检测Android 7及更高版本中的连接变化

问题:

所以问题是我有一个应用程序,当连接WiFi(连接的SSID和其他信息)或断开连接(通过移动网络)时,它会向我们的后端发送请求.但是,随着Android 7/N及更高版本的更改,CONNECTIVITY_CHANGE和CONNECTIVITY_ACTION不再在后台运行.现在大多数情况下人们滥用这个广播,因此我完全理解为什么要做出改变.但是,我不知道如何在当前状态下解决这个问题.

现在我不是一个Android开发人员(这是一个Cordova插件),所以我指望你们!

预期行为: 即使应用程序被杀/在后台,每当WiFi切换连接时,应用程序都会被唤醒并发送请求.

当前行为: 应用程序仅在应用程序位于前台时发送请求.

到目前为止尝试过: 到目前为止,我已经移动隐藏的意图,从清单中侦听CONNECTIVITY_ACTION,并在应用程序的主要部分(插件)中手动注册它.这使得它只要应用程序在内存中就可以工作,但不能在冷启动或实际背景下工作

已经看过: 大多数答案谈论使用预定的工作来代替丢失的广播.我看到这是如何工作的,例如,重试下载或类似,但不适用于我的情况(但如果我错了请纠正我).以下是我已经看过的SO帖子:

当应用程序处于前台时,检测Android 7.0 Nougat上的连接更改

不推荐使用ConnectivityManager.CONNECTIVITY_ACTION

使用JobScheduler检测连接更改

Android O - 检测后台连接的变化

android android-7.0-nougat android-8.0-oreo

37
推荐指数
2
解决办法
3万
查看次数

Android N没有发送android.net.conn.CONNECTIVITY_CHANGE广播?

我在沙箱Android N应用程序中定义了一个接收器:

<receiver
    android:exported="true"
    android:name="com.sandboxapplication.NetworkReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

这很简单:

public class NetworkReceiver extends BroadcastReceiver {
    private static final String TAG = NetworkReceiver.class.getName();
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "Received Network Change event.");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果在我的build.gradle文件中我的targetSdkVersion是23,那么这个接收器工作正常.但是,如果我将targetSdkVersion设置为24,接收器永远不会收到任何东西.事实上,如果我在我的接收器中放置一个调试断点,Android Studio会给我一个视觉指示,看起来它甚至从未加载到内存中.

我是否错过了Android N文档中非常基本的内容?有没有新的方法来检测连接变化事件?

android android-7.0-nougat

17
推荐指数
2
解决办法
2万
查看次数

CONNECTIVITY_CHANGE在Android N的目标中已弃用

我收到广播接收器的弃用声明的警告.

<!-- NETWORK RECEIVER... -->
<receiver android:name=".utils.NetworkUtils" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

警告:

对于面向N及更高版本的应用,不推荐为android.net.conn.CONNECTIVITY_CHANGE声明广播接收器.通常,应用程序不应该依赖此广播,而应使用JobScheduler或GCMNetworkManager.

没有弃用的方法有没有其他方法可以使用它?

android deprecated intentfilter broadcastreceiver android-networking

16
推荐指数
2
解决办法
1万
查看次数

Android O - 检测后台连接的变化

首先:我知道ConnectivityManager.CONNECTIVITY_ACTION已被弃用,我知道如何使用connectivityManager.registerNetworkCallback.如果阅读JobScheduler,但我不完全确定我是否正确.

我的问题是,当手机与网络连接/断开连接时,我想执行一些代码.这应该在应用程序也在后台时发生.从Android OI开始,如果我想在后台运行我想要避免的服务,则必须显示通知.
我尝试获取有关手机何时使用JobScheduler/JobServiceAPI 连接/断开连接的信息,但它只会在我安排它时执行.对我来说,似乎在这样的事件发生时我无法运行代码.有没有办法实现这个目标?我可能只需要稍微调整一下我的代码吗?

我的JobService:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class ConnectivityBackgroundServiceAPI21 extends JobService {

    @Override
    public boolean onStartJob(JobParameters jobParameters) {
        LogFactory.writeMessage(this, LOG_TAG, "Job was started");
        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
        if (activeNetwork == null) {
            LogFactory.writeMessage(this, LOG_TAG, "No active network.");
        }else{
            // Here is some logic consuming whether the device is connected to a network (and to which type)
        }
        LogFactory.writeMessage(this, LOG_TAG, "Job is done. ");
        return …
Run Code Online (Sandbox Code Playgroud)

android android-service android-8.0-oreo

13
推荐指数
1
解决办法
8059
查看次数

如何在应用程序运行时持续检查互联网连接

我已经创建了在开始时检查互联网连接的代码,但我希望它在后台继续检查互联网连接并在连接丢失时通知用户。我是 android 新手,所以请您编写正确的代码并帮助我。这段代码工作正常,我只是想让它在后台运行以检查互联网。

public class isNetworkAvailable extends Activity  {
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_is_network);
       ;
            if(!isNetworkAvailable()){
                //Create an alert dialog
                AlertDialog.Builder Checkbuilder = new  AlertDialog.Builder(isNetworkAvailable.this);
                Checkbuilder.setIcon(R.drawable.error);
                Checkbuilder.setTitle("Error!");
                Checkbuilder.setMessage("Check Your Internet Connection.");
                //Builder Retry Button

                Checkbuilder.setPositiveButton("Retry", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        //Restart The Activity
                        Intent intent = getIntent();
                        finish();
                        startActivity(intent);

                    }
                });

                Checkbuilder.setNegativeButton("Exit", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                }) ;

                AlertDialog alert=Checkbuilder.create();
                alert.show();

            } …
Run Code Online (Sandbox Code Playgroud)

android task android-intent android-layout

6
推荐指数
1
解决办法
6409
查看次数

使用JobScheduler检测连接更改

由于CONNECTIVITY_CHANGEAndroid N中已弃用意图过滤器,如何通过JobScheduler检测连接性变化?

谁能帮我?

android android-jobscheduler android-7.0-nougat

5
推荐指数
0
解决办法
3542
查看次数

Android - ConnectivityManager.EXTRA_NETWORK_INFO已弃用

我正在创建一个BroadcastReceiver来监听Wi-Fi连接的变化:

registerReceiver(new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();
        if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {

            NetworkInfo networkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); // deprecated

            // Get connectivity details from networkInfo...

        }

    }

}, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
Run Code Online (Sandbox Code Playgroud)

但是,ConnectivityManager.EXTRA_NETWORK_INFO已弃用,那么如何获取NetworkInfo对象呢?

android android-broadcast android-broadcastreceiver

2
推荐指数
1
解决办法
3470
查看次数