簡體   English   中英

USB設備訪問彈出抑制?

[英]USB device access pop-up suppression?

當 USB 設備連接到 Android 平板電腦時,會出現一個要求用戶許可的彈出窗口。 我想壓制這一點,因為客戶不想要它。 我該怎么辦?

在代碼中:

UsbManager.requestpermission(); 

被調用以授予 USB 設備臨時訪問權限。

這會引發一個彈出窗口。 默認情況下,如何禁止彈出窗口或授予用戶訪問權限?

當您在應用程序中請求權限時,“默認情況下為此 USB 設備使用”復選框似乎沒有任何作用(我不確定為什么此復選框甚至顯示在此彈出窗口中。

相反,您應該在清單中為您的活動注冊一個意圖處理程序:

<activity 
    ...
    ...
    >
    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
    </intent-filter>
    <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/usb_device_filter" />  
</activity>

您還必須在您的 xml 資源中創建一個過濾器文件,例如 res/xml/usb_device_filter:

<?xml version="1.0" encoding="utf-8"?>

<resources>
    <usb-device vendor-id="26214" product-id="26214" />
</resources>

此處的供應商 ID 和產品 ID 必須以十進制形式給出 - VID 和 PID 均高於 0x6666。

我上面給出的也適用於 USB 配件(也就是說,配件是 USB 主機,android 是設備)——在這種情況下,意圖過濾器應該注冊

<action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />

並且您還必須以完全相同的方式包含元數據過濾器。

請參閱http://developer.android.com/guide/topics/connectivity/usb/accessory.html並搜索“使用意圖過濾器”部分。

編輯

總而言之 - 如果您針對您的活動注冊意圖過濾器,則在連接 USB 設備/附件時將立即顯示 USB 權限窗口。 如果用戶選中“默認為此 USB 設備使用”框然后授予權限,這將被記住,並且不會再次顯示權限對話框(除非應用程序被卸載或用戶從應用程序管理器中清除了默認操作) )。

我在這里放了一個很小的、可怕的、有效的示例項目:

http://www.locusia.com/examples/permissionTest.zip

您將需要編輯 res/xml/usb_device_filter.xml,否則這應該允許您非常快速地對其進行測試。

對於服務...

似乎服務無法接收 USB 意圖。 我通過制作一個隱藏的活動來解決這個問題,然后重新廣播意圖。

我在我的清單中定義它是這樣的:

<activity
    android:name=".activities.UsbEventReceiverActivity"
    android:label="YOUR APPLICATION NAME - This appears in the permission popup"
    android:theme="@style/Theme.Transparent" 
    android:noHistory="true"
    android:excludeFromRecents="true"
    android:taskAffinity="com.example.taskAffinityUsbEventReceiver"
    android:process=":UsbEventReceiverActivityProcess"
    android:exported="false"
    >    
    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
    </intent-filter>
    <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/usb_device_filter" />  
</activity>

(我的服務中有一個復雜的任務/流程布局,該區域中有 YMMV)。

我定義了這樣的活動:

public class UsbEventReceiverActivity extends Activity
{   
    public static final String ACTION_USB_DEVICE_ATTACHED = "com.example.ACTION_USB_DEVICE_ATTACHED";
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
    }

    @Override
    protected void onResume()
    {
        super.onResume();

        Intent intent = getIntent();
        if (intent != null)
        {
            if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED))
            {
                Parcelable usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);

                // Create a new intent and put the usb device in as an extra
                Intent broadcastIntent = new Intent(ACTION_USB_DEVICE_ATTACHED);
                broadcastIntent.putExtra(UsbManager.EXTRA_DEVICE, usbDevice);

                // Broadcast this event so we can receive it
                sendBroadcast(broadcastIntent);
            }
        }

        // Close the activity
        finish();
    }
}

最后一塊拼圖,透明主題(我不確定,但您可能會使用內置的 android 半透明主題)- res/values/styles.xml:

<?xml version="1.0" encoding="utf-8"?>  
    <resources>  
    <style name="Theme.Transparent" parent="android:Theme">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowAnimationStyle">@null</item>
    </style>  
</resources>  

晚了,但我希望有所幫助。 官方android文檔說“當用戶連接與您的設備過濾器匹配的設備時,系統會向他們顯示一個對話框,詢問他們是否要啟動您的應用程序。如果用戶接受,您的應用程序將自動獲得訪問設備的權限,直到設備被斷開連接。”。 如果您還選中記住設備的復選框,則在應用程序卸載或通過應用程序管理器刪除數據之前授予權限。

所以你必須這樣做:

  1. 正如韋恩所說,添加意圖過濾器(並刪除主要活動中的所有權限)。
  2. 安裝應用程序並關閉它
  3. 拔下並插入您的 USB。
  4. 接受許可和復選框以記住設備。
  5. 享受。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM