Проблемы с Android Redmi 6A - Не удалось подключиться к триггеру сервера по событию BOOT_COMPLETED - PullRequest
0 голосов
/ 17 ноября 2018

У меня проблема с конкретным устройством REDMI 6A (с ОС MIUI Android Oreo 8.1), согласно моему проекту.это простое приложение, подключиться к триггеру сервера только по событию BOOT_COMPLETED.я пытаюсь проверить подключение к интернету или нет.Это очень странно, что Redmi 6A не может подключиться, но когда я тестирую с MI A1 (ОС Android Oreo 8.1 - Android One), устройство также может подключиться.Я действительно не понимаю, почему это может произойти.Я действительно ценю, если кто-то может посоветовать мне.

Это ниже кода.

AndroidManifest.xml

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.NETWORK" />

....................

<service
        android:name=".services.SocketJobIntentService"
        android:exported="false"
        android:permission="android.permission.BIND_JOB_SERVICE" android:label="@string/socket_job" />

<receiver
        android:name=".broadcast.MainBroadCastReceiver"
        android:enabled="true"
        android:label="@string/receiver_name">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

    <service
        android:name=".services.SocketSvc"></service>

SocketJobIntentService.java

public class SocketJobIntentService extends JobIntentService {

static Context context;

static final int JOB_ID = 1000;

public static void enqueueWork(Context _context, Intent work) {
    context = _context;
    enqueueWork(_context, SocketJobIntentService.class, JOB_ID, work);
}

public boolean isOnline(Context context) {

    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    //should check null because in airplane mode it will be null
    return (netInfo != null && netInfo.isConnected());
}

@Override
protected void onHandleWork(@NonNull Intent intent) {

    if(context==null){context = this;}

  boolean isInternetConnected = isOnline(context);

    if(isInternetConnected) {

        Log.d("DT_JobIntentService","Executed!! and try to Calling Another Service 'SocketSvc' !!!");

        Intent service = new Intent(this,SocketSvc.class);
        startService(service);

    }else{
        Log.e("DT_WeGetEcon","isInternetConnected=false !!!!!! LOL!");
    }



}}

MainBroadCastReceiver.java

public class MainBroadCastReceiver extends BroadcastReceiver {

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

    try {
        String action = intent.getAction();

        if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {

            Log.d("DT_MainBroadCastRceiver", action+" Called !!!");


            SocketJobIntentService.enqueueWork(context, new Intent());
            Log.d("DT_JobIntent","Try to call JobIntent");




        }
    }
    catch (Exception exc){
        Log.e("DT_ERR_ACTBOOT_COMPLTED",exc.getMessage());
    }

}}

LogCat LogCatMI A1

LogCat RedMI 6A

Я очень признателен, если кто-нибудь может дать мне совет.

Спасибо

1 Ответ

0 голосов
/ 17 ноября 2018

Наконец-то я нашел собственное решение.

Просто поместите двухстрочный код внутри onReceive MainBroadCastReceiver.java

public void onReceive(final Context context, Intent intent) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

ref to: Ошибка StrictMode $ AndroidBlockGuardPolicy.onNetwork

...