1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Android监听WIFI信号 这可能是Android上monitore Wifi信号强度的最佳方法

Android监听WIFI信号 这可能是Android上monitore Wifi信号强度的最佳方法

时间:2022-11-15 17:46:00

相关推荐

Android监听WIFI信号 这可能是Android上monitore Wifi信号强度的最佳方法

对于那些想知道我是怎么做的人 . 我使用了Job Scheduler,因为它是一个需要 Build wifi连接的任务 .

此外,您可以查看my blog,在那里您可以找到有关此信息和额外信息的更多详细信息

最后,我得到了

首先,声明每个活动的文本视图 .

android:id="@+id/messageLogin"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="@string/wifitoSlow"

android:textColor="@color/magnitude0"

android:background="@color/magnitude7"

android:gravity="center"

android:visibility="gone"

/>

然后我创建了一个具有JobCheduler的Class WfiJob,它需要NETWORK_TYPE_ANY,并且它每5秒执行一次 .

public class WifiJob {

public void createWifiJob(int jobNumber, Context context){

//We are defining a jobObject that will have a jobNumber and a serviceName that will run only if a network connection exits

JobScheduler jobScheduler = (JobScheduler)context.getSystemService(Context.JOB_SCHEDULER_SERVICE);

jobScheduler.schedule(new JobInfo.Builder(jobNumber, new ComponentName(context.getApplicationContext(), WifiJobScheduler.class))

.setRequiredNetworkType(WORK_TYPE_ANY)

.setRequiresDeviceIdle(false)

.setPeriodic(5000).build());

}

}

然后是我从JobService扩展的WifiJobScheduler . 在这里我还有WifiStrenghtListener,它是一个接口,它将向活动广播一条消息,以便显示textview .

public class WifiJobScheduler extends JobService{

private static final String TAG = "SyncService";

public static WifiStrenghtListener wifiStrenghtListener=null;

//private boolean messageIsShowed = false;

//The onStartJob is performed in the main thread, if you start asynchronous processing in this method, return true otherwise false.

@Override

public boolean onStartJob(JobParameters params) {

Log.i(TAG, "on start job: " + params.getJobId());

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

if(AppUtilities.isInteractive(pm) ){ //if the device is active

int wifiStrenght = WifiUtilities.getWifiStrengh(getApplicationContext());

Log.i(TAG, "wifi strengh ........... : " + wifiStrenght);

if(wifiStrenghtListener!=null){

if(wifiStrenght<4 && !AppUtilities.messageIsShowed){

wifiStrenghtListener.showSlowSignalOnTop(View.VISIBLE);

AppUtilities.messageIsShowed = true;

}else if(wifiStrenght>3 && AppUtilities.messageIsShowed){

wifiStrenghtListener.showSlowSignalOnTop(View.GONE);

AppUtilities.messageIsShowed = false;

}

}

}else{

cancelAllJobs();

Log.i(TAG, "job canceled........");

}

return false; // true if we're not done yet and we are going to run this on a thread

}

// If the job fails for some reason, return true from on the onStopJob to restart the job.

@Override

public boolean onStopJob(JobParameters params) {

return true;

}

public void cancelAllJobs() {

JobScheduler tm = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);

tm.cancelAll();

}

public interface WifiStrenghtListener{

void showSlowSignalOnTop(int visible);

}

}

控制器订阅活动 .

public class WifiJobSchedulerController {

public void setWifiJobSchedulerControllerInstance(WifiJobScheduler.WifiStrenghtListener listener){

WifiJobScheduler.wifiStrenghtListener = listener;

}

}

最后,您需要实现接口并订阅活动 .

public class LoginActivity extends AppCompatActivity implements WifiJobScheduler.WifiStrenghtListener {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_login);

//register wifistrenght status listener

new WifiJobSchedulerController().setWifiJobSchedulerControllerInstance(this);

}

@Override

public void showSlowSignalOnTop(int visible) {

TextView message = (TextView)findViewById(R.id.messageLogin);

message.setVisibility(visible);

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。