I'm broadcasting an intent in my app and receiving it with a broadcast receiver. I can handle the broadcasting and receiving. No problem with that. However, I want to register the receiver completely programmatically instead of doing it in the manifest file. Notice, that in the manifest file, there are two attributes of the receiver android:enabled="true" and android:exported="false". I need to know, how do I specifically set these two attributes when I register the receiver programmatically?
My AndroidManifest.xml file:
My MainActivity.java file:Code:<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mybroadcastapplication"> <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/Theme.MyBroadcastApplication"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MyBroadcastReceiver" android:enabled="true" android:exported="false"> </receiver> </application> </manifest>
My MyBroadcastReceiver.java file:Code:public class MainActivity extends AppCompatActivity implements View.OnClickListener { MyBroadcastReceiver myReceiver; IntentFilter intentFilter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myReceiver = new MyBroadcastReceiver(); intentFilter = new IntentFilter(); intentFilter.addAction("com.example.mybroadcastapplication.EXPLICIT_INTENT"); findViewById(R.id.button1).setOnClickListener(this); } public void broadcastIntent() { Intent intent = new Intent(); intent.setAction("com.example.mybroadcastapplication.EXPLICIT_INTENT"); getApplicationContext().sendBroadcast(intent); } @Override protected void onPostResume() { super.onPostResume(); registerReceiver(myReceiver, intentFilter); } @Override protected void onStop() { super.onStop(); unregisterReceiver(myReceiver); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: broadcastIntent(); break; default: } } }
RegardsCode:public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction() != null && intent.getAction().equals("com.example.mybroadcastapplication.EXPLICIT_INTENT")) Toast.makeText(context, "Explicit intent received.", Toast.LENGTH_LONG).show(); } }




Reply With Quote
