编写一个程序实现发送广播和通知的案例,要求如下: (1) 实现一个自定义的BroadcastReceiver; (2) 动态注册BroadcastReceiver; (3) 当点击“发送广播”按钮时,发送一个点播歌曲的广播,歌曲名称为“XXXXXX”; (4) 广播接收器在接收到广播后,发送一个通知,在状态栏提示中,显示通知“收到广播通知”; (5) 当点击下拉状态提示栏,点击相应通知,实现页面的跳转,在页面中显示点播的歌曲名称,并播放歌曲。
时间: 2024-03-03 16:53:06 浏览: 14
以下是一个简单的实现发送广播和通知的案例:
1. 自定义BroadcastReceiver
```java
public class MyBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "MyBroadcastReceiver";
private static final String ACTION_PLAY_MUSIC = "com.example.broadcast.ACTION_PLAY_MUSIC";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_PLAY_MUSIC.equals(action)) {
String musicName = intent.getStringExtra("music_name");
Log.d(TAG, "onReceive: receive broadcast, music name is " + musicName);
sendNotification(context, musicName);
}
}
private void sendNotification(Context context, String musicName) {
Intent intent = new Intent(context, MusicActivity.class);
intent.putExtra("music_name", musicName);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "default")
.setSmallIcon(R.drawable.ic_launcher_background)
.setContentTitle("收到广播通知")
.setContentText("点播歌曲:" + musicName)
.setAutoCancel(true)
.setContentIntent(pendingIntent);
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
notificationManagerCompat.notify(1, builder.build());
}
}
```
2. 动态注册BroadcastReceiver
```java
public class MainActivity extends AppCompatActivity {
private MyBroadcastReceiver myBroadcastReceiver;
private IntentFilter intentFilter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myBroadcastReceiver = new MyBroadcastReceiver();
intentFilter = new IntentFilter();
intentFilter.addAction(MyBroadcastReceiver.ACTION_PLAY_MUSIC);
registerReceiver(myBroadcastReceiver, intentFilter);
Button button = findViewById(R.id.btn_send_broadcast);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MyBroadcastReceiver.ACTION_PLAY_MUSIC);
intent.putExtra("music_name", "XXXXXX");
sendBroadcast(intent);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myBroadcastReceiver);
}
}
```
3. MusicActivity
```java
public class MusicActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music);
String musicName = getIntent().getStringExtra("music_name");
TextView textView = findViewById(R.id.tv_music_name);
textView.setText(musicName);
mediaPlayer = MediaPlayer.create(this, R.raw.music);
mediaPlayer.start();
}
@Override
protected void onDestroy() {
super.onDestroy();
mediaPlayer.stop();
mediaPlayer.release();
}
}
```
注意:需要在AndroidManifest.xml文件中声明MusicActivity。
完整的代码如下:
MyBroadcastReceiver.java
```java
public class MyBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "MyBroadcastReceiver";
private static final String ACTION_PLAY_MUSIC = "com.example.broadcast.ACTION_PLAY_MUSIC";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_PLAY_MUSIC.equals(action)) {
String musicName = intent.getStringExtra("music_name");
Log.d(TAG, "onReceive: receive broadcast, music name is " + musicName);
sendNotification(context, musicName);
}
}
private void sendNotification(Context context, String musicName) {
Intent intent = new Intent(context, MusicActivity.class);
intent.putExtra("music_name", musicName);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "default")
.setSmallIcon(R.drawable.ic_launcher_background)
.setContentTitle("收到广播通知")
.setContentText("点播歌曲:" + musicName)
.setAutoCancel(true)
.setContentIntent(pendingIntent);
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
notificationManagerCompat.notify(1, builder.build());
}
}
```
MainActivity.java
```java
public class MainActivity extends AppCompatActivity {
private MyBroadcastReceiver myBroadcastReceiver;
private IntentFilter intentFilter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myBroadcastReceiver = new MyBroadcastReceiver();
intentFilter = new IntentFilter();
intentFilter.addAction(MyBroadcastReceiver.ACTION_PLAY_MUSIC);
registerReceiver(myBroadcastReceiver, intentFilter);
Button button = findViewById(R.id.btn_send_broadcast);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MyBroadcastReceiver.ACTION_PLAY_MUSIC);
intent.putExtra("music_name", "XXXXXX");
sendBroadcast(intent);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myBroadcastReceiver);
}
}
```
MusicActivity.java
```java
public class MusicActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music);
String musicName = getIntent().getStringExtra("music_name");
TextView textView = findViewById(R.id.tv_music_name);
textView.setText(musicName);
mediaPlayer = MediaPlayer.create(this, R.raw.music);
mediaPlayer.start();
}
@Override
protected void onDestroy() {
super.onDestroy();
mediaPlayer.stop();
mediaPlayer.release();
}
}
```
activity_main.xml
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn_send_broadcast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送广播"
android:layout_centerInParent="true"/>
</RelativeLayout>
```
activity_music.xml
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_music_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:layout_centerInParent="true"/>
</RelativeLayout>
```