[英]Programmatically Connect and Disconnect Android Device
我需要找到一種方法(使用Android應用程序)以編程方式連接和斷開Android設備與主機的連接。
我正在使用Galaxy Nexus。 我的目標是讓所有內容盡可能接近庫存,盡管我已經在內核中啟用了詳細的調試消息,並且為了查看它們已經在手機上啟用root訪問權限來訪問/proc/kmsg
(以及shell命令dmesg
) 。
我確信有一種方法可以利用root訪問來完成我需要做的事情,但是我所有的嘗試都導致了nix。
/proc/bus/usb
/dev/bus/usb
我將嘗試弄清楚如何在列表中執行最后一個對象,因為我可以在我的應用程序中rmmod
和insmod
生成的*.ko
,這將連接和斷開手機。 我不確定這個選項的可行性。
解決方案在接近截止日期時出現,所以我幾乎可以肯定這不是最好的做事方式,但它符合我的要求。
構建Modded內核(允許掛鈎特定功能)
構建內核模塊(提供連接和斷開的實際功能 )
構建應用程序
如果您有興趣重復這些結果,請閱讀此處發布的文檔,隨時向我發送任何問題。
https://docs.google.com/uc?export=download&id=0B9WchRkSOWwJbi10MGhLWUljT2s
您可以嘗試啟用/禁用某些安全設置,例如Settings.Secure.USB_MASS_STORAGE_ENABLED
或Settings.Secure.ADB_ENABLED
(取決於您所謂的“連接”!)
此代碼應該工作(禁用USB大容量存儲):
Settings.Secure.putInt(getContentResolver(),Settings.Secure.USB_MASS_STORAGE_ENABLED, 0);
Settings.Secure.putInt(getContentResolver(),Settings.Secure.USB_MASS_STORAGE_ENABLED,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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.