有沒有辦法通過訪問IUsbManager接口類來調用service.grantDevicePermission()方法來自動設置USB設備的權限,而無需始終顯示ConfirmationActivity詢問用戶?Android USB自動授予權限
謝謝
有沒有辦法通過訪問IUsbManager接口類來調用service.grantDevicePermission()方法來自動設置USB設備的權限,而無需始終顯示ConfirmationActivity詢問用戶?Android USB自動授予權限
謝謝
當然可以!您可以使用此代碼,爲我工作:
public boolean grantAutomaticPermission(UsbDevice usbDevice)
{
try
{
Context context=YourActivityOrApplication;
PackageManager pkgManager=context.getPackageManager();
ApplicationInfo appInfo=pkgManager.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
Class serviceManagerClass=Class.forName("android.os.ServiceManager");
Method getServiceMethod=serviceManagerClass.getDeclaredMethod("getService",String.class);
getServiceMethod.setAccessible(true);
android.os.IBinder binder=(android.os.IBinder)getServiceMethod.invoke(null, Context.USB_SERVICE);
Class iUsbManagerClass=Class.forName("android.hardware.usb.IUsbManager");
Class stubClass=Class.forName("android.hardware.usb.IUsbManager$Stub");
Method asInterfaceMethod=stubClass.getDeclaredMethod("asInterface", android.os.IBinder.class);
asInterfaceMethod.setAccessible(true);
Object iUsbManager=asInterfaceMethod.invoke(null, binder);
System.out.println("UID : " + appInfo.uid + " " + appInfo.processName + " " + appInfo.permission);
final Method grantDevicePermissionMethod = iUsbManagerClass.getDeclaredMethod("grantDevicePermission", UsbDevice.class,int.class);
grantDevicePermissionMethod.setAccessible(true);
grantDevicePermissionMethod.invoke(iUsbManager, usbDevice,appInfo.uid);
System.out.println("Method OK : " + binder + " " + iUsbManager);
return true;
}
catch(Exception e)
{
System.err.println("Error trying to assing automatic usb permission : ");
e.printStackTrace();
return false;
}
}
我所做的就是實現機器人來完成這個使用反射。爲了使用此代碼,您必須具備:
<uses-permission android:name="android.permission.MANAGE_USB"/>
但是有一個問題,我不知道確切,糾正我,如果我錯了:用戶持有的權限,而不是應用程序,那麼,如果您嘗試從應用程序儀表板啓動應用程序將會失敗。有必要確保比android開始你的應用程序,例如,將其設置爲啓動器並讓它以HOME意圖開始。
問候,期待可以幫助別人。
當然不是。這首先會使權限的全部無效。但用戶可以選擇始終允許特定的連接。
是的,你可以,
,如果你採取被張貼@CristhianB的代碼,你將能夠把它完成,但和它的一個地獄,但你需要得到它的一個工作以下內容:
第三種方法可以讓你的應用程序做任何你想要的,因爲它會使用相同的密鑰進行簽名作爲系統鍵,這意味着您作爲系統應用程序運行,但是您不必將您的應用程序安裝在priv-app文件夾中。
如果您有關於此事的任何問題,我將很樂意提供幫助,我只是實施了同樣的事情,並花了三週的時間才完成,因此我可以爲您節省大量時間。 :-)
並且您將必須將
請你擴展一下用戶如何選擇允許特定的連接?彈出窗口中有一個勾選框「此USB設備默認使用」,我已勾選,但當我拔下設備並再次插入時,我將獲得與上次相同的權限彈出窗口。理想情況下,我獲得許可的知識需要在設備重啓後繼續存在。 – kbro