IUsbManager インターフェイス クラスにアクセスして service.grantDevicePermission() メソッドを呼び出し、ConfirmationActivity が常にユーザーに確認することなく USB デバイスのアクセス許可を自動的に設定する方法はありますか?
ありがとう
IUsbManager インターフェイス クラスにアクセスして service.grantDevicePermission() メソッドを呼び出し、ConfirmationActivity が常にユーザーに確認することなく 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によって投稿されたコードを取得すると、それを実行できますが、それは非常に困難ですが、次のいずれかで動作させる必要があります。
3 番目の方法では、アプリはシステム キーと同じキーで署名されるため、アプリは何でも実行できます。これは、システム アプリとして実行していることを意味しますが、アプリを priv-app フォルダーにインストールする必要はありません。
この件に関してご質問がございましたら、喜んでお手伝いさせていただきます。同じことを実装したばかりで、完了するまでに 3 週間かかりましたので、多くの時間を節約できます。:-)
もちろん違います。それは、そもそもパーミッションを持つという全体のポイントを無効にします。ただし、ユーザーは常に特定の接続を許可するように選択できます。