![](/img/trans.png)
[英]No pop-up message on android device when sending notification with pusbots
[英]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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.