Android跨应用通信:图像上传与FCM通知系统

需积分: 8 0 下载量 86 浏览量 更新于2024-11-21 收藏 175KB ZIP 举报
资源摘要信息:"android-camera-things是一个多应用程序Android项目,旨在将Androidthings应用程序与Android应用程序相连接,实现图像的捕获、上传及通知功能。该项目包括两个关键部分:Androidthings应用程序和Android应用程序。Androidthings应用程序负责在按下按钮时使用相机拍摄照片并上传至服务器。而Android应用程序则负责接收来自服务器的图像推送通知。整个过程利用Java语言编写,确保了平台的跨兼容性,并通过Firebase Cloud Messaging (FCM)实现推送通知功能。" 知识点: 1. Android开发: - Android应用程序的开发涉及到使用Android Studio和Java编程语言来编写应用程序,通常包括UI设计、事件处理、数据存储和网络通信等方面。 - Android应用程序架构通常遵循MVC(模型-视图-控制器)模式,以实现应用的模块化和可维护性。 2. Androidthings开发: - Androidthings是Google推出的适用于各种硬件平台的Android版本,允许开发者创建针对物联网设备的应用程序。 - 开发Androidthings应用时,通常需要了解如何使用硬件API,例如GPIO或I2C来控制硬件设备。 3. Java服务器端开发: - Java常用于开发服务器端应用程序,能够处理来自客户端的请求并执行相应的逻辑,如处理上传的图像数据。 - Java服务器可能使用如Servlets、JSP或Spring框架等技术来构建。 4. FCM(Firebase Cloud Messaging): - FCM是Google提供的推送通知服务,允许开发者向用户设备发送通知消息。 - FCM的集成需要在Android客户端和服务器端进行配置,包括设置FCM服务和获取FCM令牌。 5. 图像处理和上传: - 应用程序需要能够访问和控制相机模块来捕获图像。 - 捕获的图像需要被压缩和格式化以便上传,常用的图像格式包括JPEG和PNG。 - 图像上传功能通常需要使用HTTP客户端库,如Apache HttpClient或OkHttp。 6. 项目构建和先决条件: - 项目中提及"将google-services.json文件复制到根文件夹",这是一个配置文件,用于启用Firebase服务,如FCM。 - 在本地设置并运行项目时需要确保所有依赖和环境变量配置正确。 7. 设备兼容性: - 项目中提及的RainbowHAT是针对Androidthings的一块硬件开发板,拥有相应的按钮和相机等硬件接口。 - 在不同的硬件平台上运行Androidthings应用可能需要对硬件的特定API进行适配。 8. Android应用与Androidthings应用之间的通信: - Android应用与Androidthings应用之间的通信可以通过网络协议(如HTTP或WebSocket)实现。 - 可以通过设置服务器作为中介,来转发Androidthings应用发送的图像到Android应用,或直接通过端到端的网络通信实现数据传输。 9. 文件管理和压缩: - 项目中提到了一个压缩包文件的文件名称列表,这可能意味着项目源代码被打包成一个ZIP文件供分发。 - 在开发过程中可能需要对项目文件进行版本控制,常见的版本控制系统包括Git和SVN。 10. Android通知: - Android提供了丰富的通知API,允许应用在通知栏显示不同类型的通知消息。 - 通知可以带有图片、声音、震动等,以吸引用户注意并提供交互方式。

01-01 08:11:27.038 E/StrictMode( 2641): Tried to access the API:ViewConfiguration which needs to have proper configuration from a non-UI Context:com.android.camera.app.CameraApp@32d9eff The API:ViewConfiguration needs a proper configuration. Use UI contexts such as an activity or a context created via createWindowContext(Display, int, Bundle) or createConfigurationContext(Configuration) with a proper configuration. 01-01 08:11:27.038 E/StrictMode( 2641): java.lang.IllegalAccessException: Tried to access the API:ViewConfiguration which needs to have proper configuration from a non-UI Context:com.android.camera.app.CameraApp@32d9eff 01-01 08:11:27.038 E/StrictMode( 2641): at android.os.StrictMode.assertConfigurationContext(StrictMode.java:2296) 01-01 08:11:27.038 E/StrictMode( 2641): at android.view.ViewConfiguration.get(ViewConfiguration.java:521) 01-01 08:11:27.038 E/StrictMode( 2641): at android.view.View.<init>(View.java:5321) 01-01 08:11:27.038 E/StrictMode( 2641): at android.widget.ImageView.<init>(ImageView.java:181) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.data.PhotoItem.getView(PhotoItem.java:127) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.data.CameraFilmstripDataAdapter.getView(CameraFilmstripDataAdapter.java:151) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.widget.FilmstripView.buildViewItemAt(FilmstripView.java:850) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.widget.FilmstripView.reload(FilmstripView.java:1827) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.widget.FilmstripView.access$1300(FilmstripView.java:58) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.widget.FilmstripView$3.onFilmstripItemLoaded(FilmstripView.java:1567) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.data.CameraFilmstripDataAdapter.replaceItemList(CameraFilmstripDataAdapter.java:276) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.data.CameraFilmstripDataAdapter.access$700(CameraFilmstripDataAdapter.java:39) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.data.CameraFilmstripDataAdapter$QueryTask.onPostExecute(CameraFilmstripDataAdapter.java:447) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.camera.data.CameraFilmstripDataAdapter$QueryTask.onPostExecute(CameraFilmstripDataAdapter.java:379) 01-01 08:11:27.038 E/StrictMode( 2641): at android.os.AsyncTask.finish(AsyncTask.java:771) 01-01 08:11:27.038 E/StrictMode( 2641): at android.os.AsyncTask.access$900(AsyncTask.java:199) 01-01 08:11:27.038 E/StrictMode( 2641): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:788) 01-01 08:11:27.038 E/StrictMode( 2641): at android.os.Handler.dispatchMessage(Handler.java:106) 01-01 08:11:27.038 E/StrictMode( 2641): at android.os.Looper.loopOnce(Looper.java:201) 01-01 08:11:27.038 E/StrictMode( 2641): at android.os.Looper.loop(Looper.java:288) 01-01 08:11:27.038 E/StrictMode( 2641): at android.app.ActivityThread.main(ActivityThread.java:7870) 01-01 08:11:27.038 E/StrictMode( 2641): at java.lang.reflect.Method.invoke(Native Method) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 01-01 08:11:27.038 E/StrictMode( 2641): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)

2023-07-14 上传

E/CameraX: No default CameraXConfig.Provider specified in meta-data. The most likely cause is you did not include a default implementation in your build such as 'camera-camera2'. D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.photodiary, PID: 13938 java.lang.IllegalStateException: CameraX is not configured properly. The most likely cause is you did not include a default implementation in your build such as 'camera-camera2'. at androidx.camera.core.CameraX.<init>(CameraX.java:109) at androidx.camera.lifecycle.ProcessCameraProvider.getOrCreateCameraXInstance(ProcessCameraProvider.java:181) at androidx.camera.lifecycle.ProcessCameraProvider.getInstance(ProcessCameraProvider.java:167) at com.example.photodiary.Diary.startCamera(Diary.java:43) at com.example.photodiary.Diary.access$000(Diary.java:20) at com.example.photodiary.Diary$1.onClick(Diary.java:32) at android.view.View.performClick(View.java:7125) at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1131) at android.view.View.performClickInternal(View.java:7102) at android.view.View.access$3500(View.java:801) at android.view.View$PerformClick.run(View.java:27336) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

2023-05-24 上传