Android发送数据给其他APP

构造intent时,必须指定希望intent“触发”的操作。 Android定义了几个操作,包括ACTION_SEND,你可能猜到,表示intent是从一个Activity发送数据到另一个,甚至跨过程边界。要将数据发送到另一个Activity,所有您需要做的是指定数据及其类型,系统将识别兼容的接收Activity并将其显示给用户(如果有多个选项)或立即启动Activity(如果只有一个选项)。同样,您可以通过在清单(manifest)中指定其他应用程序,宣传您的Activity支持从其他应用程序接收的数据类型。

在具有intent的应用之间发送和接收数据最常用于内容的社交共享。 Intents允许用户使用他们喜欢的应用程序快速,轻松地共享信息。

注意:向ActionBar添加共享操作项的最佳方法是使用ShareActionProvider,它在API级别14中可用。

发送文本数据

ACTION_SEND操作最直接和最常见的用法是将文本内容从一个Activity发送到另一个Activity。例如,内置的浏览器应用程序可以作为文本与任何应用程序共享当前显示的页面的URL。这对于通过电子邮件或社交网络与朋友分享文章或网站很有用。这里是实现这种类型的共享的代码:

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);

如果安装的应用程序具有与ACTION_SEND和MIME类型text / plain匹配的过滤器,Android系统将运行它;如果多于一个应用匹配,则系统显示允许用户选择应用的消歧对话框(“选择器”)。

然而,如果你调用Intent.createChooser(),传递它的Intent对象,它返回一个版本的意图,将永远显示选择器。这有一些优点:

  • 即使用户以前为此意图选择了默认操作,选择器仍将显示。
  • 如果没有应用程序匹配,Android会显示系统消息。
  • 您可以为选择器对话框指定标题。

这里是更新的代码:

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to)));

1
生成的对话框。

或者,您可以为意图设置一些标准附加功能:EXTRA_EMAIL,EXTRA_CC,EXTRA_BCC,EXTRA_SUBJECT。如果接收应用程序不是设计为使用它们,它只是忽略它们。

注意:某些电子邮件应用程序(例如Gmail)需要一个String[]作为EXTRA_EMAIL和EXTRA_CC等附加功能,请使用putExtra(String,String[])将它们添加到您的意图中。

发送二进制数据

使用ACTION_SEND操作以及设置相应的MIME类型并将数据的URI放置在额外命名的EXTRA_STREAM中来共享二进制数据。这通常用于共享图像,但可用于共享任何类型的二进制内容:

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
shareIntent.setType("image/jpeg");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));

请注意以下事项:

  • 您可以使用MIME类型“* / *”,但这只会匹配能够处理通用数据流的Activity。

接收应用程序需要访问Uri所指向的数据的权限。推荐的方法是:

  • 将数据存储在您自己的ContentProvider中,确保其他应用程序具有访问您的提供程序的正确权限。提供访问的首选机制是使用临时的每URI权限,并且只授予对接收应用程序的访问权限。一个简单的方法来创建这样的ContentProvider是使用FileProvider辅助类。
  • 使用系统MediaStore。 MediaStore主要针对视频,音频和图像MIME类型,但是从Android 3.0(API级别11)开始,它还可以存储非媒体类型(有关详细信息,请参阅MediaStore.Files)。可以使用scanFile()将文件插入到MediaStore中,然后将适合共享的content://style Uri传递给提供的onScanCompleted()回调。请注意,一旦添加到系统MediaStore,设备上的任何应用都可以访问内容。

发送多个内容

要共享多个内容,请使用ACTION_SEND_MULTIPLE操作以及指向内容的URI列表。 MIME类型因您分享的内容组合而异。例如,如果您共享3个JPEG图像,类型仍是“image / jpeg”。对于图像类型的混合,应该是“image / ”来匹配处理任何类型的图像的活动。你应该只使用“ / *”,如果你分享了各种各样的类型。如前所述,由接收应用程序来解析和处理您的数据。这里有一个例子:

ArrayList<Uri> imageUris = new ArrayList<Uri>();
imageUris.add(imageUri1); // Add your image URIs here
imageUris.add(imageUri2);

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "Share images to.."));

与之前一样,请确保提供的URI指向接收应用程序可以访问的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在STM32上使用HC-05蓝牙模块与App进行数据通信可以按照如下步骤进行: 1. 首先需要配置HC-05蓝牙模块和STM32之间的串口通信,包括波特率、数据位、停止位、校验位等参数。可以参考HC-05蓝牙模块的数据手册和STM32的相关文档进行配置。 2. 在STM32中编程实现数据的发送操作。可以使用STM32的USART串口库函数来实现数据的发送,示例代码如下: #include "stm32f1xx_hal.h" UART_HandleTypeDef huart1; void SystemClock_Config(void); int main(void) { HAL_Init(); SystemClock_Config(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_USART1_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_AF_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); huart1.Instance = USART1; huart1.Init.BaudRate = 9600; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; HAL_UART_Init(&huart1); uint8_t data[10] = "Hello"; while(1) { HAL_UART_Transmit(&huart1, data, sizeof(data), 100); HAL_Delay(1000); } } 3. 接下来,可以在App中开发接收STM32发送数据的代码。可以使用Android SDK提供的Bluetooth API进行开发,示例代码如下: private static BluetoothAdapter bluetoothAdapter; public static void connect(Context context) { // Get a handle to the default local Bluetooth adapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); // Get a BluetoothDevice representing the remote device BluetoothDevice device = bluetoothAdapter.getRemoteDevice("00:00:00:00:00"); // Create a socket with the remote device using UUID BluetoothSocket socket; try { socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")); } catch (IOException e) { Log.e(TAG, "Failed to create Bluetooth socket"); return; } // Connect to the remote device using the Bluetooth socket try { socket.connect(); } catch (IOException e) { Log.e(TAG, "Failed to connect to remote device"); try { socket.close(); } catch (IOException e2) { Log.e(TAG, "Failed to close Bluetooth socket"); } return; } // Start a thread to read data from the Bluetooth socket new Thread(new Runnable() { @Override public void run() { byte[] buffer = new byte[1024]; int bytes; while (true) { try { InputStream inputStream = socket.getInputStream(); bytes = inputStream.read(buffer); String data = new String(buffer, 0, bytes); Log.d(TAG, data); } catch (IOException e) { Log.e(TAG, "Failed to read from Bluetooth socket"); break; } } } }).start(); } 通过以上步骤,即可实现STM32与App之间的数据通信。需要注意的是,在进行数据交互时需要保证HC-05蓝牙模块和App之间的连接状态稳定,并避免数据丢失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值