gpt4 book ai didi

java - 应用程序关闭时广播接收器不工作

转载 作者:行者123 更新时间:2023-12-03 11:18:44 25 4
gpt4 key购买 nike

所以我制作了两个不同的应用程序,一个发送广播,另一个接收它并显示 toast 。但是,当我关闭接收器应用程序时,即使我在 list 文件中定义了接收器,第二个应用程序也不再接收广播。

app1 的 MainActivity 中的广播发送者。

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button b = (Button)findViewById(R.id.button2);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent();
i.setAction("com.example.ali.rrr");
i.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
sendBroadcast(i);
Log.e("Broadcast","sent");
}
});
}

应用 2 广播接收器:
public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
Toast.makeText(context, "Broadcast has been recieved!", Toast.LENGTH_SHORT).show();
Log.e("SUCCESS", "IN RECIEVER");
//throw new UnsupportedOperationException("Not yet implemented");
}

应用 2s list :
<?xml version="1.0" encoding="utf-8"?>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.ali.rrr" />
</intent-filter>
</receiver>

<activity
android:name=".MainActivity"
android:label="@string/title_activity_main"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".Main2Activity"
android:label="@string/title_activity_main2"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

最佳答案

在 list 中静态注册我的 BroadcastReceiver (BR),应用适当的 Intent 过滤器,使用 JobIntentService(并在 list 中注册)处理从我的 BR 调用的工作后,我仍然得到不一致的结果。

完成我上面列出的所有操作后,您应该能够发送 ADB 命令来激活您的广播并处理您的服务中的工作,即使应用程序已关闭。这在某些时候对我有用,但不是所有时候。

This article描述了对 BR 的限制。
“从 Android 3.1 开始,Android 系统 将所有接收者排除在接收 Intent 的情况下,如果用户从未启动过相应的应用程序或用户通过 Android 菜单明确停止了应用程序”( AKA 用户执行强制停止 )

当我通过调试启动应用程序,然后在我的设备上将其关闭时,我的 ADB 命令永远不会激活我的 BR。但是,在我的调试 session 结束后,当我在我的设备上打开应用程序并将其关闭时,我可以通过 ADB 命令激活我的 BR。

这是因为当您调试应用程序时,然后在设备上手动将其关闭, Android 认为这是强制停止 因此为什么我的 BR 无法激活 直到我在没有调试的情况下重新打开设备上的应用程序 .

在互联网上搜索了几个小时,但找不到我的解决方案,所以我想我会把它贴在这里,以防万一一些可怜的不幸的灵魂遇到了我曾经遇到的同样奇怪的功能。

快乐编码:)

关于java - 应用程序关闭时广播接收器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44149921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com