Android[2] - Playing Music when Receiving Custom Broadcast

当收到自定义广播时播放音乐 想要在收到广播的时候播放音乐,大体分为两个步骤。首先要接收到广播,然后通过服务播放音乐。 01 广播 Android 应用与 Android 系统和其他 Android 应用之间可以相互收发广播消息,这与发布-订阅设计模式相似。这些广播会在所关注的事件发生时发送。举例来说,Android 系统会在发生各种系统事件时发送广播,例如系统启动或设备开始充电时。再比如,应用可以发送自定义广播来通知其他应用它们可能感兴趣的事件(例如,一些新数据已下载)。 接收广播有两种方式,一种是使用静态文件注册广播接收器、另外一种是动态的注册广播接收器。此处我们将分别使用两种方法介绍如何接收系统广播和自定义广播。 系统广播 我们将使用静态注册广播接收器的方式来接收接收短信产生的系统广播。 再Manifests.xml文件中声明Receiver <receiver android:name=".SmsReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> 创建 BroadcastReceiver 子类并实现 onReceive(Context, Intent) package xyz.retrove.androidcrouse2; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent serviceIntent = new Intent(context, MyService.class); //在广播组件里,通过上下文对象启动音乐播放服务组件 context.startService(serviceIntent); //新建调用Activity组件的意图 Intent activityIntent = new Intent(context, MainActivity....

May 11, 2021 · 2 min · Retrove

Android[1] - Wechat Like Interface Design

Android 类微信界面设计 设计APP门户界面,其中包含4个tab切换效果。 01 功能分析 微信的界面非常的简单(如图所示),顶端是一个操作栏,上面有此APP的名字以及一个加号按钮,点击加号按钮后会出现一个下拉菜单展示所有可执行的快捷操作。底部是一个导航菜单,点击四个不同的按钮,屏幕中间的内容会跟随其一同变化。 因此,我们大致的思路是:页面应该包含一个TopAppBar,一个ButtomNavigationMenu以及四个Fragment。 为了与Android的官方风格保持一致,这里我们使用 Android Material Design 控件进行开发,最后的效果应该如下图所示。 02 代码实现 首先,我们需要在activity_main.xml中添加TopAppBar和ButtomNavigationMenu两个控件以及中间显示内容的Fragment,并且为他们添加合适的约束条件。 需要注意的是,这里的Fragment由于需要动态填充,需要使用FragmentContainerView并且不要指定fragment的name。 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <com.google.android.material.appbar.AppBarLayout android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <com.google.android.material.appbar.MaterialToolbar android:id="@+id/topAppBar" android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/Widget.MaterialComponents.Toolbar.Primary" app:menu="@menu/top_app_bar" app:navigationIcon="@drawable/ic_android_black_24dp" app:title="@string/page_title" /> </com.google.android.material.appbar.AppBarLayout> <androidx.fragment.app.FragmentContainerView android:id="@+id/content" android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintBottom_toTopOf="@+id/bottom_navigation" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/appBarLayout" /> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottom_navigation" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:menu="@menu/bottom_navigation_menu" /> </androidx.constraintlayout.widget.ConstraintLayout> TopAppBar 由于在activity_main.xml当中我们指定了顶部的应用栏的菜单为@menu/top_app_bar,我们需要在menu文件夹下创建一个名为top_app_bar的菜单文件。 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas....

April 5, 2021 · 1 min · Retrove