GVKun编程网logo

Android Wifi的forget()操作实例详解(android wifi direct)

13

关于AndroidWifi的forget()操作实例详解和androidwifidirect的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Androidgetevent用法实例详解、An

关于Android Wifi的forget()操作实例详解android wifi direct的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android getevent用法实例详解、Android MotionEvent中getX()和getRawX()的区别实例详解、android stdio 编译项目报Error:Failed to find target with hash string ''android-24、Android wifi 调试详解及简单实例等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

Android Wifi的forget()操作实例详解(android wifi direct)

Android Wifi的forget()操作实例详解(android wifi direct)

Android  Wifi的forget()操作实例详解

我们在处理某个Wifi连接时,有时会需要忘掉当前连接的密码信息。执行这项操作,我们需要调用WifiManager::forget()函数:

/** 
 * Delete the network in the supplicant config. 
 * 
 * This function is used instead of a sequence of removeNetwork() 
 * and saveConfiguration(). 
 * 
 * @param config the set of variables that describe the configuration,*      contained in a {@link WifiConfiguration} object. 
 * @param listener for callbacks on success or failure. Can be null. 
 * @throws IllegalStateException if the WifiManager instance needs to be 
 * initialized again 
 * @hide 
 */ 
public void forget(int netId,ActionListener listener) { 
  if (netId < 0) throw new IllegalArgumentException("Network id cannot be negative"); 
  validateChannel(); 
  sAsyncChannel.sendMessage(FORGET_NETWORK,netId,putListener(listener)); 
} 

从函数介绍可知,调用forget()函数,当前网络连接的配置信息就会从wpa_supplicant.conf中删掉;之后这个网络就不会有自动重连的动作,因为conf文件中已经没有该网络的配置信息。

跟踪FORGET_NETWORK消息,WifiServiceImpl::ClientHandler处理:

case WifiManager.FORGET_NETWORK: 
  if (isOwner(msg.sendingUid)) { 
    mWifiStateMachine.sendMessage(Message.obtain(msg)); 
  } else { 
    Slog.e(TAG,"Forget is not authorized for user"); 
    replyFailed(msg,WifiManager.FORGET_NETWORK_Failed,WifiManager.NOT_AUTHORIZED); 
  } 
  break; 

简单地将该消息转发给WifiStateMachine。此时Wifi是连接状态,WifiStateMachine中当前状态是ConnectedState,它的父状态ConnectModeState处理:

case WifiManager.FORGET_NETWORK: 
  // Debug only,remember last configuration that was forgotten 
  WifiConfiguration toRemove 
      = mWifiConfigStore.getWifiConfiguration(message.arg1); 
  if (toRemove == null) { 
    lastForgetConfigurationAttempt = null; 
  } else { 
    lastForgetConfigurationAttempt = new WifiConfiguration(toRemove); 
  } 
  // check that the caller owns this network 
  netId = message.arg1; 
 
  if (!mWifiConfigStore.canModifyNetwork(message.sendingUid,/* onlyAnnotate */ false)) { 
    logw("Not authorized to forget network " 
       + " cnid=" + netId 
       + " uid=" + message.sendingUid); 
    replyToMessage(message,WifiManager.NOT_AUTHORIZED); 
    break; 
  } 
 
  if (mWifiConfigStore.forgetNetwork(message.arg1)) { 
    replyToMessage(message,WifiManager.FORGET_NETWORK_SUCCEEDED); 
    broadcastWifiCredentialChanged(WifiManager.WIFI_CREDENTIAL_FORGOT,(WifiConfiguration) message.obj); 
  } else { 
    loge("Failed to forget network"); 
    replyToMessage(message,WifiManager.ERROR); 
  } 
  break; 

mWifiConfigStore.forgetNetwork():

/** 
 * Forget the specified network and save config 
 * 
 * @param netId network to forget 
 * @return {@code true} if it succeeds,{@code false} otherwise 
 */ 
boolean forgetNetwork(int netId) { 
  if (showNetworks) localLog("forgetNetwork",netId); 
 
  WifiConfiguration config = mConfigurednetworks.get(netId); 
  boolean remove = removeConfigAndSendbroadcastIfNeeded(netId); 
  if (!remove) { 
    //success but we dont want to remove the network from supplicant conf file 
    return true; 
  } 
  if (mWifiNative.removeNetwork(netId)) { 
    if (config != null && config.isPasspoint()) { 
      writePasspointConfigs(config.FQDN,null); 
    } 
    mWifiNative.saveConfig(); 
    writeKNownNetworkHistory(true); 
    return true; 
  } else { 
    loge("Failed to remove network " + netId); 
    return false; 
  } 
} 

根据传入的当前网络的netId,分别调用WifiNative的removeNetwork()、saveConfig()方法删除conf文件的配置信息并进行保存;执行完成后,forget()函数结束了。通过代码我们发现,执行forget()函数并不会引起WifiStateMachine中状态的切换。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Android getevent用法实例详解

Android getevent用法实例详解

 Android getevent用法实例详解

最近在测试设备按键的常用命令,感觉这些命令都有的,但就是不知道怎么查找。

翻阅了几篇博文,才发现有一个getevent,就是指这样的命令.

首先需要说明的是getevent命令后面可以带上具体的input设备,列如getevent /dev/iput/event0,这样可以过滤掉一些不用显示的input的设备.

我在之前的使用中,还是有些找不到点子,也是一步一步使用起来的。

首先看-p 选项,-p选项用于输出input设备相关的一些信息,列如,getevent -p /dev/input/event0:

add device 1 : /dev/input/event0:

name: “radio_key”

events:

KEY (0001): 0043 0044 0057 0058

input props: 

那么-i 选项,同-p 选项差不多,只是显示的信息更丰富,getevent -i /dev/input/event0:

add device 1: /dev/input/event0 
bus: 0000 
vendor 0000 
product 0000 
version 0000 
name: “radio_key” 
location: “” 
id: “” 
version: 1.0.1 
events: 
KEY (0001): 0043 0044 0057 0058 
input props: 

对于-p或-i选项呢,可以帮助我们判断input设备是否已经注册成功.

再来看-l选项,我们首先不加-l选项来看看,输入getevent /dev/input/event7命令,注event7是触摸屏的input设备:

0001 014a 00000001 
0003 0030 000000ff 
0003 0035 00000262 
0003 0036 00000546 
0003 0039 00000011 
0000 0002 00000000 
0000 0000 00000000 
0001 014a 00000000 
0000 0002 00000000 
0000 0000 00000000

看到了吗,得到的是这样一组信息,只看数字的话,也不知道具体的含义,那么如果加上-l选项呢,getevent -l /dev/input/event7:

EV_KEY BTN_TOUCH DOWN 
EV_ABS ABS_MT_TOUCH_MAJOR 000000ff 
EV_ABS ABS_MT_POSITION_X 00000262 
EV_ABS ABS_MT_POSITION_Y 00000546 
EV_ABS ABS_MT_TRACKING_ID 00000011 
EV_SYN SYN_MT_REPORT 00000000 
EV_SYN SYN_REPORT 00000000 
EV_KEY BTN_TOUCH UP 
EV_SYN SYN_MT_REPORT 00000000 
EV_SYN SYN_REPORT 00000000

我们看,这样就容易明白多了,格式是event type、event code、event value,至于这些所代表的含义可以参考input设备相关的东西。

来看-r选项,-r选项可以输出输入报告的速率,例如getevent -r /dev/input/event7:

0000 0000 00000000 rate 83 
0003 0030 0000004d 
0003 0035 0000024e 
0003 0036 00000364 
0003 0039 00000000 
0000 0002 00000000 
0000 0000 00000000 rate 83 
0003 0030 0000004c 
0003 0035 0000024f 
0003 0036 00000364 
0003 0039 00000000 
0000 0002 00000000 
0000 0000 00000000 rate 83

使用这个选项可以帮助我们检测输入报告的速率是否满足我们的要求,例如检测tp报点速率。

关于getevent命令选项大概就介绍这几个,其他的用法可以参考上面的getevent命令用法,另外,这些命令选项都是可以组合使用的,例如getevent -lr /dev/input/event7。

我是在检测设备按键时,觉得物理键指令无法找到,才发现这些命令。

与getevent相对应的是sendevent命令,但是sendevent命令输入稍显复杂,可以使用另外一个命令input来代替。例如,输入input keyevent KEYCODE_POWER表示按下一次power按键。

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Android MotionEvent中getX()和getRawX()的区别实例详解

Android MotionEvent中getX()和getRawX()的区别实例详解

Android MotionEvent中getX()和getRawX()的区别实例详解

实例代码:

public class Res extends Activity implements View.OnTouchListener {  
  
  Button btn = null;  
  int x = 0;  
  int y = 0;  
  int rawx = 0;  
  int rawy = 0;  
  
    
  @Override  
  public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
    btn = (Button) findViewById(R.id.button);  
    btn.setonTouchListener(this);  
  }  
  
  public boolean onTouch(View view,MotionEvent event) {  
    int eventaction = event.getAction();  
    switch (eventaction) {  
    case MotionEvent.ACTION_DOWN:  
      break;  
    case MotionEvent.ACTION_MOVE:  
      x = (int) event.getX();  
      y = (int) event.getY();  
      rawx = (int) event.getRawX();  
      rawy = (int) event.getRawY();  
      Log.d("DEBUG","getX=" + x + "getY=" + y + "n" + "getRawX=" + rawx  
          + "getRawY=" + rawy + "n");  
      break;  
  
    case MotionEvent.ACTION_UP:  
  
      break;  
    }  
    return false;  
  }  
}  

结论:

当你触到按钮时,x,y是相对于该按钮左上点(控件本身)的相对位置。

而rawx,rawy始终是相对于屏幕的位置。

可知:

  • getRowX:触摸点相对于屏幕的坐标
  • getX: 触摸点相对于按钮的坐标
  • getTop: 按钮左上角相对于父view(LinerLayout)的y坐标
  • getLeft: 按钮左上角相对于父view(LinerLayout)的x坐标

可以想象 getRight()等同于下面的计算:getLeft()+getWidth()。

getX()是表示Widget相对于自身左上角的x坐标,而getRawX()是表示相对于屏幕左上角的x坐标值(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏幕),getY(),getRawY()一样的道理

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

android stdio 编译项目报Error:Failed to find target with hash string ''android-24

android stdio 编译项目报Error:Failed to find target with hash string ''android-24

android stdio 编译项目报Error:Failed to find target with hash string ''android-24

 

  • 查看已有的SDK

 

 

 

  • 设置项目的sdk为 25

 

android {

compileSdkVersion 25

buildToolsVersion "25.0.0"

defaultConfig {

applicationId "com.accessibility"

minSdkVersion 14

targetSdkVersion 25

versionCode 1

versionName "1.0"

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro''

}

}

}

 

编译之后一切OK

 

Android wifi 调试详解及简单实例

Android wifi 调试详解及简单实例

Android wifi 调试

前言:

做android开发的时候,经常遇到的一个问题就是真机调试次数多了,会导致usb口,损坏,而且长期给手机充电也会损坏手机,所以我想了想是否可以拿usb调试,网上找了下,还真可以,但都写的比较繁琐,今天我们就使用3条命令完成任务

首先我们需要使用的工具是adb,它基于tcp协议之上

1.开始我们需要给手机开启tcpip模式,这个时候需要usb线连接手机

adb tcpip 端口号(随便写个大点的比如:5555)

写完这个之后,usb就没用了

2.你需要查看你手机的ip地址,方法很多

如果想使用命令的话(如果使用命令查看,usb还不能拔,查完再拔)

adb shell ifconfig wlan0

如果不使用的话,手机上也可以查到

查到Ip后,就可以连接了

3.连接手机

adb connect 手机ip

4.如果想断开连接的话

adb disconnect 手机ip

大功告成,注意手机和PC应该在同一wifi下,实际你只要PC能ping通手机ip就没问题,如果没有路由器怎么办?你电脑里面的360wifi是干什么的?

补充:

如果想切换回usb模式

adb usb

如果切换回去的话,下次连接还需要数据线开启tcpip,如果不切换的话,以后调试就再也不用数据线了

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

关于Android Wifi的forget()操作实例详解android wifi direct的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android getevent用法实例详解、Android MotionEvent中getX()和getRawX()的区别实例详解、android stdio 编译项目报Error:Failed to find target with hash string ''android-24、Android wifi 调试详解及简单实例的相关信息,请在本站寻找。

本文标签: