zoukankan      html  css  js  c++  java
  • Android

    就象程序可以发送数据给其他程序,所以也可以接收其他程序的数据。想一下用户如何和程序交互,以及想从其他程序接收什么样类型的数据。例如,一个社交程序可能对接收其他程序的文字(比如有趣的网址)感兴趣。Google+ 程序可接收文字和单多张图片。用这个app,用户可以和容易的用Android Gallery中的相片在Google+上发布。

    更新Manifest

    intent filter会告诉系统程序会打算接收什么。就和前面讲的如何用ACTION_SEND创建intent相似,创建intent filter来接收带有这个操作的intent。在manifest中用<intent-filter>元素来来定义一个intent filter。例如,如果程序可接收文字,任何类型的单张图片,或任何类型的多张图片,mainfest应该象:

     1 <activity android:name=".ui.MyActivity" >
     2     <intent-filter>
     3         <action android:name="android.intent.action.SEND" />
     4         <category android:name="android.intent.category.DEFAULT" />
     5         <data android:mimeType="image/*" />
     6     </intent-filter>
     7     <intent-filter>
     8         <action android:name="android.intent.action.SEND" />
     9         <category android:name="android.intent.category.DEFAULT" />
    10         <data android:mimeType="text/plain" />
    11     </intent-filter>
    12     <intent-filter>
    13         <action android:name="android.intent.action.SEND_MULTIPLE" />
    14         <category android:name="android.intent.category.DEFAULT" />
    15         <data android:mimeType="image/*" />
    16     </intent-filter>
    17 </activity>

    注意:更多关于intent filters和intetent解决方案请参考Intents and Intent Fileters

    当其他程序通过创建intent然后传递给startActivity()来分享上面的类容,你的程序会在intent chooser列表中显示,如果用户选择了你的程序,相应的activity(上面例子中的.ui.MyActivity)将会被启动。然后就由你来在代码和界面中来处理内容了。

    处理传入的数据

    要处理Intent传递的数据,首先调用getIntent()来获得Intent对象。一旦获得了这个对象,可以通过查看数据来决定接下来怎么做。记住如果activity可以从系统的其他部分启动,比如launcher,那么需要在查看intent的时候考虑这些情况。

     1 void onCreate (Bundle savedInstanceState) {
     2     ...
     3     // 获得 intent, action 和 MIME type
     4     Intent intent = getIntent();
     5     String action = intent.getAction();
     6     String type = intent.getType();
     7 
     8     if (Intent.ACTION_SEND.equals(action) && type != null) {
     9         if ("text/plain".equals(type)) {
    10             handleSendText(intent); // 处理发送来的文字
    11         } else if (type.startsWith("image/")) {
    12             handleSendImage(intent); // 处理发送来的图片
    13         }
    14     } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
    15         if (type.startsWith("image/")) {
    16             handleSendMultipleImages(intent); // 处理发送来的多张图片
    17         }
    18     } else {
    19         // 处理其他intents,比如由主屏启动
    20     }
    21     ...
    22 }
    23 
    24 void handleSendText(Intent intent) {
    25     String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
    26     if (sharedText != null) {
    27         // 根据分享的文字更新UI
    28     }
    29 }
    30 
    31 void handleSendImage(Intent intent) {
    32     Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
    33     if (imageUri != null) {
    34         // 根据分享的图片更新UI
    35     }
    36 }
    37 
    38 void handleSendMultipleImages(Intent intent) {
    39     ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
    40     if (imageUris != null) {
    41         // 根据分享的多张图片更新UI
    42     }
    43 }

    注意:要格外小心的检查传入的数据,你不知道其他程序传进来什么。例如,有可能设置了错的MIME类型,或者图片可能非常大。还要记住,在另外一个线程中处理二进制数据,而不是UI线程。

    更新UI可以是像填充EditText一样简单,或者更难一些像在一张图片上添加一个有趣的滤镜。由你的程序来决定接下来会发生什么。

     

    上一篇:Android - 分享内容 - 给其他APP发送内容

    下一篇:Android - 分享内容 - 添加一个简单的分享操作

  • 相关阅读:
    2021.1.28 个人rating赛补题报告
    2021.1.23 个人rating赛补题报告
    2021.1.23 个人rating赛补题报告
    2020.12.14 个人训练赛补题报告
    2020.11.28 2020团体程序设计天梯赛补题报告
    2020.12.3 Codeforces Beta Round #73(Div2)补题报告
    Xhorse VVDI Prog V5.0.6 is Ready for BCM2 Adapter
    Program 2021 Ford Bronco All Keys Lost using VVDI Key Tool Plus
    Xhorse VVDI Prog V5.0.4 Software Update in July 2021
    How to use Xhorse VVDI2 to Exchange BMW FEM/BDC Module?
  • 原文地址:https://www.cnblogs.com/fengquanwang/p/3148689.html
Copyright © 2011-2022 走看看