我正在学习BroadCastReceiver
.我试图用下面的代码实现的是,我想看到一个Toast
当我切换到飞行模式,在应用程序是打开或不.我没有做什么/做错了?请帮助.谢谢
ConnectivityChangedReceiver.java 类
public class ConnectivityChangedReceiver extends BroadcastReceiver {
@Override
public void onReceive( Context context, Intent intent ){
Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.kirathe.mos.c_max">
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<uses-permission android:name="android.permission.SEND_SMS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".ConnectivityChangedReceiver">
<intent-filter>
<action android:name="android.intent.action.AIRPLANE_MODE">
</action>
</intent-filter>
</receiver>
</application>
MainActivity.javawww.example.com
public class MainActivity extends AppCompatActivity {
private TextView switchStatus;
private Switch mySwitch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
9条答案
按热度按时间h9vpoimq1#
Android文档:
https://developer.android.com/guide/components/broadcast-exceptions
作为Android 8.0(API级别26)后台执行限制的一部分,面向API级别26或更高级别的应用不能再在其清单中为隐式广播注册广播接收器。但是,目前有几个广播不受这些限制的限制。无论应用的目标API级别是什么,应用都可以继续为以下广播注册侦听器。
和
https://developer.android.com/distribute/best-practices/develop/target-sdk
Google Play将要求新应用从2018年8月1日起至少面向Android 8.0(API级别26),应用更新从2018年11月1日起面向Android 8.0。
**“android.intent.action.AIRPLANE_MODE”**已不在豁免广播列表中。因此,请在Activity而不是AndroidManifest中注册广播接收器。
gev0vcfq2#
所以我刚刚找到了解决我上面问题的方法。我改变了
到
(没有名字开头的‘。‘。希望对一个搁浅的人有帮助!
iezvtpos3#
广播接收器的官方文件说:
广播接收器是否可以从其应用程序外部的源接收消息-如果可以,则为“真”,如果不可以,则为“假”。如果为“假”,则广播接收器可以接收的唯一消息是由具有相同用户ID的同一应用程序或多个应用程序的组件发送的消息。
m1m5dgzv4#
这样试试,试试添加,android:exported=“true”:
//也添加此权限
4ktjp1zp5#
如果您API级别大于26,则应向代码添加如下权限:
vltsax256#
intent- filter在AndroidManifest.xml文件的receiver标签中不起作用。MainActivity.java
现在一切都很好。
epfja78i7#
您必须在manifest.xml文件中启用广播:
kd3sttzy8#
您需要将接收器放入bundles包中:
你应该把它放在一个与bundleId相同的包中,这样就可以让上面的工作了。name字段中的第一个点意味着Class是bundles命名空间的成员。所以,因为它不在包中,所以这个点让它看起来在错误的地方。
axzmvihb9#
遵循上述规则,直到您的应用程序无法正常工作,然后转到您的应用程序设置并清除数据,然后允许权限。确保它是有帮助的谢谢。