我需要找到一种方法(使用Android应用程序)以编程方式连接和断开Android设备与主机的连接。
我正在使用Galaxy Nexus。我的目标是尽可能保持一切尽可能接近库存,尽管我已经在内核中启用了详细的调试消息,并且为了查看它们已经在电话上启用了root访问权限以访问/proc/kmsg
(以及shell命令{ {1}})。
我确信有一种方法可以利用root访问来完成我需要做的事情,但是我所有的尝试都导致了nix。
dmesg
/proc/bus/usb
我将尝试弄清楚如何在列表中执行最后一个对象,因为我可以/dev/bus/usb
和rmmod
在我的应用程序中生成insmod
这将连接和断开手机。我不确定这个选项的可行性。
答案 0 :(得分:1)
解决方案在接近截止日期时出现,所以我几乎可以肯定这不是最好的做事方式,但它符合我的要求。
构建Modded内核(允许挂钩特定功能)
构建内核模块(提供连接和断开连接的实际功能)
构建应用程序
如果您有兴趣重复这些结果,请阅读此处发布的文件,随时向我发送任何问题。
https://docs.google.com/uc?export=download&id=0B9WchRkSOWwJbi10MGhLWUljT2s
答案 1 :(得分:0)
您可以尝试启用/停用某些安全设置,例如Settings.Secure.USB_MASS_STORAGE_ENABLED
或Settings.Secure.ADB_ENABLED
(取决于您所谓的“连接”!)
此代码应该有效(禁用USB大容量存储):
Settings.Secure.putInt(getContentResolver(),Settings.Secure.USB_MASS_STORAGE_ENABLED, 0);
答案 2 :(得分:0)
Settings.Secure.putInt(getContentResolver(),Settings.Secure.USB_MASS_STORAGE_ENABLED,0);
答案 3 :(得分:0)
InternetControl.java
public class InternetControl {
public static void EnableInternet(Context context)
{
try {
Log.i("Reached Enable", "I am here");
setMobileDataEnabled(context,true);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void DisableInternet(Context context)
{
try {
Log.i("Reached Disable", "I am here");
setMobileDataEnabled(context,false);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
private static void setMobileDataEnabled(Context context , boolean enabled) throws Exception{
final ConnectivityManager conn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
final Class connClass = Class.forName(conman.getClass().getName());
final Field iConnectivityManagerField = connClass.getDeclaredField("mService");
iConnectivityManagerField.setAccessible(true);
final Object iConnectivityManager = iConnectivityManagerField.get(conn);
final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
setMobileDataEnabledMethod.setAccessible(true);
setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled);
}
}
的Manifest.xml
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
启用或禁用功能是静态的,因此您可以使用
来调用
classname.functionname();