我有一个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();
    }   
}
使用compileSdkVersion 23,但是尝试支持9到9.
getNetworkInfo(int)在23中已弃用.建议改为使用getAllNetworks和getNetworkInfo(Network).然而,这两者都需要最少的API 21.
我们可以在支持包中使用哪个类可以帮助解决这个问题吗?
我知道之前提出了一个解决方案,但是我对9的最小api要求的挑战造成了问题.
networking android android-6.0-marshmallow android-connectivitymanager
问题:
所以问题是我有一个应用程序,当连接WiFi(连接的SSID和其他信息)或断开连接(通过移动网络)时,它会向我们的后端发送请求.但是,随着Android 7/N及更高版本的更改,CONNECTIVITY_CHANGE和CONNECTIVITY_ACTION不再在后台运行.现在大多数情况下人们滥用这个广播,因此我完全理解为什么要做出改变.但是,我不知道如何在当前状态下解决这个问题.
现在我不是一个Android开发人员(这是一个Cordova插件),所以我指望你们!
预期行为: 即使应用程序被杀/在后台,每当WiFi切换连接时,应用程序都会被唤醒并发送请求.
当前行为: 应用程序仅在应用程序位于前台时发送请求.
到目前为止尝试过: 到目前为止,我已经移动隐藏的意图,从清单中侦听CONNECTIVITY_ACTION,并在应用程序的主要部分(插件)中手动注册它.这使得它只要应用程序在内存中就可以工作,但不能在冷启动或实际背景下工作
已经看过: 大多数答案谈论使用预定的工作来代替丢失的广播.我看到这是如何工作的,例如,重试下载或类似,但不适用于我的情况(但如果我错了请纠正我).以下是我已经看过的SO帖子:
当应用程序处于前台时,检测Android 7.0 Nougat上的连接更改
我在沙箱Android N应用程序中定义了一个接收器:
<receiver
    android:exported="true"
    android:name="com.sandboxapplication.NetworkReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>
这很简单:
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.");
    }
}
如果在我的build.gradle文件中我的targetSdkVersion是23,那么这个接收器工作正常.但是,如果我将targetSdkVersion设置为24,接收器永远不会收到任何东西.事实上,如果我在我的接收器中放置一个调试断点,Android Studio会给我一个视觉指示,看起来它甚至从未加载到内存中.
我是否错过了Android N文档中非常基本的内容?有没有新的方法来检测连接变化事件?
我收到广播接收器的弃用声明的警告.
<!-- NETWORK RECEIVER... -->
<receiver android:name=".utils.NetworkUtils" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>
警告:
对于面向N及更高版本的应用,不推荐为android.net.conn.CONNECTIVITY_CHANGE声明广播接收器.通常,应用程序不应该依赖此广播,而应使用JobScheduler或GCMNetworkManager.
没有弃用的方法有没有其他方法可以使用它?
android deprecated intentfilter broadcastreceiver android-networking
首先:我知道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 …我已经创建了在开始时检查互联网连接的代码,但我希望它在后台继续检查互联网连接并在连接丢失时通知用户。我是 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();
            } …由于CONNECTIVITY_CHANGEAndroid N中已弃用意图过滤器,如何通过JobScheduler检测连接性变化?
谁能帮我?
我正在创建一个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));
但是,ConnectivityManager.EXTRA_NETWORK_INFO已弃用,那么如何获取NetworkInfo对象呢?
android ×9
networking ×2
android-connectivitymanager ×1
asynchronous ×1
deprecated ×1
intentfilter ×1
task ×1