android – USB权限没有提示

android – USB权限没有提示,第1张

概述我的应用程序中有2个活动.说FirstActivity和SecondActivity. FirstActivity是MAIN和LAUNCHER活动. SecondActivity使用usb设备.我希望USB权限提示在应用程序的生命周期内只出现一次. 如果只有一个Activity,则清单中的以下行解决了我的目的: <activity android:name=".FirstActivity"> 我的应用程序中有2个活动.说FirstActivity和SecondActivity. FirstActivity是MAIN和LAUNCHER活动. SecondActivity使用usb设备.我希望USB权限提示在应用程序的生命周期内只出现一次.

如果只有一个Activity,则清单中的以下行解决了我的目的:

<activity androID:name=".FirstActivity">    <intent-filter>        <action androID:name="androID.intent.action.MAIN" />        <category androID:name="androID.intent.category.LAUNCHER" />        <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>

这是在做以下事情:

>每当usb设备(在xml中提到)连接时启动FirstActivity,应用程序尚未打开.
>提示usb设备权限仅出现一次.

如何修改此项以实现以下目标:

>如果SecondActivity已经运行并且连接了新的USB设备,我必须能够在不重新启动应用程序的情况下使用该设备.所以我写了一个广播接收器,如下所示:

public class TriggerReceiver extends broadcastReceiver {    @OverrIDe    public voID onReceive(Context context,Intent intent) {        if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) {         read connected usb devices and register serial port call Listener back.    }}

但问题是当SecondActivity运行时附加USB设备时,FirstActivity再次重新启动.我该如何避免这种情况?

如果需要,将添加更多信息.感谢任何帮助.

解决方法 尝试“删除”意图过滤器< action androID:name =“androID.harDWare.usb.action.USB_DEVICE_ATTACHED”/>来自FirstActivity,如 this问题

更新

FirstActivity在每个USB_DEVICE_ATTACHED(甚至是SecondActivity正在运行)上触发,因为您设置了< action androID:name =“androID.harDWare.usb.action.USB_DEVICE_ATTACHED”/>在AndroIDManifest.xml文件中过滤它.因此,您应该在SecondActivity运行时禁用此过滤器.你可以这样做:

1)在AndroIDManifest.xml中将(例如AliasFirstActivity)添加到FirstActivity并移动< action androID:name =“androID.harDWare.usb.action.USB_DEVICE_ATTACHED”/>过滤到别名描述(您应该从FirstActivity描述中删除< action androID:name =“androID.harDWare.usb.action.USB_DEVICE_ATTACHED”/>):

<activity-alias            androID:targetActivity=".FirstActivity"            androID:name=".AliasFirstActivity"            androID:label="@string/app_name">            <intent-filter>                <action androID:name="androID.intent.action.MAIN"/>                <category androID:name="androID.intent.category.LAUNCHER"/>            </intent-filter>            <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/device_filter" />        </activity-alias>

2)将此代码添加到SecondActivity的onCreate()(或onResume())

PackageManager pm = getApplicationContext().getPackageManager();        Componentname compname =                new Componentname(getPackagename(),getPackagename() + ".AliasFirstActivity");        pm.setComponentEnabledSetting(                compname,PackageManager.COMPONENT_ENABLED_STATE_Disabled,PackageManager.DONT_KILL_APP);

抑制针对FirstActivity的意图过滤器USB_DEVICE_ATTACHED.你应该在SecondActivity中有类似的东西:

@OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_second);        triggerReceiver = new TriggerReceiver();        IntentFilter filter = new IntentFilter();        filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);        registerReceiver(triggerReceiver,filter);        PackageManager pm = getApplicationContext().getPackageManager();        Componentname compname =                new Componentname(getPackagename(),PackageManager.DONT_KILL_APP);    }

这应该解决你的问题.
3)如果需要,你可以恢复< action androID:name =“androID.harDWare.usb.action.USB_DEVICE_ATTACHED”/>使用此代码过滤SecondActivity的onDestroy()(或onPause())中的FirstActivity:

PackageManager pm = getApplicationContext().getPackageManager();    Componentname compname =            new Componentname(getPackagename(),getPackagename() + ".AliasFirstActivity");    pm.setComponentEnabledSetting(            compname,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP);
总结

以上是内存溢出为你收集整理的android – USB权限没有提示全部内容,希望文章能够帮你解决android – USB权限没有提示所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1135272.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存