Android 打开共享操作上的不可见活动(操作\u发送)
在StackOverfow上有很多类似的问题,但它们不能解决我的问题 任务是处理使用默认共享机制(ACTION_SEND)从不同应用程序发送的服务内意图。Android 打开共享操作上的不可见活动(操作\u发送),android,android-intent,android-activity,android-sharing,Android,Android Intent,Android Activity,Android Sharing,在StackOverfow上有很多类似的问题,但它们不能解决我的问题 任务是处理使用默认共享机制(ACTION_SEND)从不同应用程序发送的服务内意图。 但只要动作\u SEND是一个活动动作,我们就必须在活动中获取意图并将其广播给服务部门。如果这个活动对用户来说是不可见的,那就太完美了 我已经做了很多研究,尝试了很多解决方案 使活动隐形的第一步属于活动样式 我试过这个方法 android:theme=“@android:style/theme.transparent.NoTitleBar”
但只要
动作\u SEND
是一个活动动作,我们就必须在活动中获取意图并将其广播给服务部门。如果这个活动对用户来说是不可见的,那就太完美了
我已经做了很多研究,尝试了很多解决方案
<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:backgroundDimEnabled">true</item>
</style>
有什么解决方案吗? 我试过这个方法
使用
Theme.NoDisplay
我刚刚做了这个,它对我的情况很有帮助:
<activity
android:name=".SensorBoardActivity"
android:theme="@android:style/Theme.NoDisplay"
android:excludeFromRecents="true"
android:noHistory="true">
我看到您已经有了
finish();
,但是对于其他人来说,在离开onCreate()之前执行它是很重要的
在共享操作上仍会以黑屏闪烁。但是,当我处理UsbManager.action\u USB\u设备连接的事件时,Theme.NoDisplay对我有效。活动不可见且不闪烁。他们正在做同样的事情-发送服务意图并完成。但是对于共享操作Theme.NoDisplay对我无效。有什么建议吗?@nicolAuyes:因为我从未见过主题。NoDisplay
打开一个窗口(即“黑屏闪烁”),我不知道该告诉你什么。演示问题的非常短的视频-活动确实有主题。NoDisplay
样式。即使我在这个活动中什么都不做(仅完成()
调用),它也会“闪烁”“也是。我想知道这是否与选择器有关,因为这是两种方案的区别之一。尝试手动调用您的操作\u SEND
主题。NoDisplay
活动并查看发生了什么。如果它的行为符合您的要求,那么您的问题实际上在于选择器,也许切换到ShareActionProvider
会给您带来更好的结果。如果你仍然出现黑屏闪烁,那么它必须与你的活动设置有关(例如,自定义主题更改)。我已经尝试了你的建议。首先,我手动调用了ACTION\u SEND
Theme.NoDisplay
activity,它的行为符合预期。它是隐形的,我看不到任何闪烁。我认为问题出在选择器上,因为有时如果我按下“共享”,然后按下“返回”按钮,它会以黑色闪烁(请查看此示例)。但当我与几乎任何其他应用程序共享内容时(但不是所有应用程序,请查看此示例),它不会闪烁。也许他们知道如何处理这种情况?可能是什么?
public class HandleShareIntentActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startService(new Intent(this, xxxService.class).putExtra(
Constants.ACTION_SHARE_KEY, getIntent()));
finish();
}
}
<activity
android:name=".SensorBoardActivity"
android:theme="@android:style/Theme.NoDisplay"
android:excludeFromRecents="true"
android:noHistory="true">