Android中實現APP文本內容的分享發送與接收方法簡述

来源:http://www.cnblogs.com/panhouye/archive/2016/12/16/6188574.html
-Advertisement-
Play Games

謹記(指定選擇器Intent.createChooser()) 開始今天的內容前,先閑聊一下: (1)突然有一天頭腦風暴,對很多問題有了新的看法和見解,迫不及待的想要分享給大家,文檔已經寫好了,我需要通過微信或者QQ,簡訊等社交工具發送給大家。 (2)在網上發現一段特別好的文章,想要保存收藏下來。 ...


謹記(指定選擇器Intent.createChooser())

開始今天的內容前,先閑聊一下:

(1)突然有一天頭腦風暴,對很多問題有了新的看法和見解,迫不及待的想要分享給大家,文檔已經寫好了,我需要通過微信或者QQ,簡訊等社交工具發送給大家。

(2)在網上發現一段特別好的文章,想要保存收藏下來。

上面描述了進入智能手機時代後,我們經常遇到的兩種情況,那麼作為開發者的我們如何讓自己開發的APP實現這兩種功能呢,下麵我們以實現文本的發送分享以及接收來梳理下兩種功能的實現過程(其他類型的數據在博文末尾會給大家做簡單介紹)。

第一種情況:APP實現發送分享文本功能

在實現APP發送與分享的功能時,根據是否指定選擇器Intent.createChooser(),會有兩種不同的實現效果。

(1)指定選擇器的實現效果如下:

每次需要發送分享的時候,都會彈出所有具有分享功能的APP供選擇。(個人認為很人性化)

(2)未指定選擇器的實現效果如下:

圖中演示測試使用的安卓原生系統,在未設置選擇器的時候,每次會提醒用戶使用當前APP提交發送分享所使用的APP僅使用一次還是始終都使用(經測試萬一大家手滑,誤點了“始終”,那麼好吧,如果下次想換其他APP分享內容時,除非你卸載重裝當前APP);但在其他一些安卓定製系統的品牌手機上測試時,發現僅第一次會跳出所有具有發送分享功能的APP供你選擇(但是不會提示你僅使用一次還是始終),一旦選擇後,後果與在原生系統上點擊始終的效果相同發火。立馬卸載APP的心都有了。

好了,實現效果大家都看到了,我們開始擼一把代碼吧:

第一步:Layout中界面佈局文件activity_main.xml文件(文本編輯框以及按鈕):

 1 <?xml version="1.0" encoding="utf-8"?>
 2     <LinearLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:id="@+id/activity_main"
 6     android:layout_width="match_parent"
 7     android:layout_height="match_parent"
 8     android:orientation="vertical"
 9     tools:context="com.example.administrator.sendshare.MainActivity">
10     <EditText
11         android:id="@+id/et"
12         android:layout_width="match_parent"
13         android:layout_height="wrap_content"
14         android:hint="想給潘侯爺說點什麼"/>
15     <Button
16         android:layout_width="match_parent"
17         android:layout_height="wrap_content"
18         android:onClick="sendtext"
19         android:text="發送文本" />
20 </LinearLayout>

第二步:Java中實現代碼MainActivity.java功能實現代碼:

註意註意:指定選擇器啊

 1 public class MainActivity extends AppCompatActivity {
 2     EditText et;//聲明文本編輯框
 3     String str;//聲明字元串,用於獲取文本編輯框內的內容
 4     @Override
 5     protected void onCreate(Bundle savedInstanceState) {
 6         super.onCreate(savedInstanceState);
 7         setContentView(R.layout.activity_main);
 8         //獲取文本框
 9         et = (EditText) findViewById(R.id.et);
10     }
11     //創建方法將輸入的內容發出去
12     public void sendtext(View view){
13         str=et.getText().toString();
14         Intent intent = new Intent();
15         /*設置action為發送分享,
16         *並判斷要發送分享的內容是否為空
17          */
18         intent.setAction(Intent.ACTION_SEND);
19         if(str!=null){
20             intent.putExtra(Intent.EXTRA_TEXT,str);
21         }else{
22             intent.putExtra(Intent.EXTRA_TEXT,"");
23         }
24         intent.setType("text/plain");//設置分享發送的數據類型
25         //未指定選擇器,部分定製系統首次選擇後,後期將無法再次改變
26 //        startActivity(intent);
27         //指定選擇器選擇使用有發送文本功能的App
28         startActivity(Intent.createChooser(intent,getResources().getText(R.string.app_name)));
29     }
30 }

第二種情況:APP實現接收分享文本功能

實現效果如下(將簡訊內容分享到我們的APP上):

layout佈局界面為初始預設,僅一個預設helloworld的TextView界面,這裡就省略不寫了。

第一步:AndroidMainfest.xml配置文件(添加接收文本所需的action等intent屬性)

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.administrator.test" >
 4     <application
 5         android:allowBackup="true"
 6         android:icon="@mipmap/ic_launcher"
 7         android:label="@string/app_name"
 8         android:supportsRtl="true"
 9         android:theme="@style/AppTheme" >
10         <activity android:name=".MainActivity" >
11             <intent-filter>
12                 <action android:name="android.intent.action.MAIN" />
13                 //添加接收文本用的action,category,mimeType
14                 <action android:name="android.intent.action.SEND" />
15                 <category android:name="android.intent.category.DEFAULT" />
16                 <data android:mimeType="text/plain" />
17                 <category android:name="android.intent.category.LAUNCHER" />
18             </intent-filter>
19         </activity>
20     </application>
21 </manifest>

第二步:Java中實現代碼MainActivity.java功能實現代碼

 1 import android.content.Intent;
 2 import android.support.v7.app.AppCompatActivity;
 3 import android.os.Bundle;
 4 import android.widget.TextView;
 5 public class MainActivity extends AppCompatActivity {
 6     private TextView tv;
 7     @Override
 8     protected void onCreate(Bundle savedInstanceState) {
 9         super.onCreate(savedInstanceState);
10         setContentView(R.layout.activity_main);
11         tv = (TextView) findViewById(R.id.tv);
12         //獲取intent
13         Intent intent =getIntent();
14         String action = intent.getAction();
15         String type = intent.getType();
16         //設置接收類型為文本
17         if (Intent.ACTION_SEND.equals(action) && type != null){
18             if ("text/plain".equals(type)) {
19                 handlerText(intent);
20             }
21         }
22 }
23 //該方法用於獲取intent所包含的文本信息,並顯示到APP的Activity界面上
24     private void handlerText(Intent intent) {
25         String data = intent.getStringExtra(Intent.EXTRA_TEXT);
26         tv.setText(data);
27     }
28 }

額外補充:

設置更新桌面背景,核心代碼如下:

 1 import android.content.Intent;
 2 import android.support.v7.app.AppCompatActivity;
 3 import android.os.Bundle;
 4 import android.view.View;
 5 public class Main2Activity extends AppCompatActivity {
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main2);
10     }
11     public void select(View view){
12         Intent intent = new Intent();
13         intent.setAction(Intent.ACTION_SET_WALLPAPER);
14         startActivity(Intent.createChooser(intent,getResources().getText(R.string.app_name)));
15 //        startActivity(intent);
16     }
17 }

以二進位的形式分享發送圖片,核心代碼如下:

1 public void sendimage(View view) {
2     Intent intent = new Intent();
3     intent.setAction(Intent.ACTION_SEND);
4     intent.putExtra(Intent.EXTRA_STREAM, Uri.parse(Environment.getExternalStorageDirectory()+"/DCIM/Camera/20161204_195228.jpg"));
5     intent.setType("image/*");
6 //  startActivity(intent);
7     startActivity(Intent.createChooser(intent,getResources().getText(R.string.app_name)));
8 }

發送分享多張圖片,核心代碼如下:

 1 public void sendimages(View view) {
 2     ArrayList<Uri> uris = new ArrayList<>();
 3     //演示發送兩張圖片
 4     uris.add(Uri.parse(Environment.getExternalStorageDirectory()+"/DCIM/Camera/20161204_195228.jpg"));
 5     uris.add(Uri.parse(Environment.getExternalStorageDirectory()+"/DCIM/Camera/20161204_195155.jpg"));
 6     Intent intent = new Intent();
 7     intent.setAction(Intent.ACTION_SEND_MULTIPLE);
 8     intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,uris);
 9     intent.setType("image/*");
10 //        startActivity(intent);
11     startActivity(Intent.createChooser(intent,getResources().getText(R.string.app_name)));
12 }


今天到這了,有問題歡迎評論討論,晚安嘍!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 刪除Mysql yum remove mysql mysql-server mysql-libs mysql-server; find / -name mysql 將找到的相關東西delete掉; rpm -qa|grep mysql(查詢出來的東東yum remove掉) 2 安裝Mysql ...
  • 在Arduino中,可以使用AnalogWrite來使用硬體產生490Hz/980Hz的pwm波,並可根據參數來設定占空比。不瞭解這個的同學可以去 "AnalogWrite" 學習下, "SecretsOfArduinoPWM" 也是講了Arduino在avr的定時/計數器上做的封裝,我們這裡並不講 ...
  • Linux文件和目錄的屬性及許可權 命令: [root@oldboy ~]# ls -lhi total 40K 24973 -rw-------. 1 root root 1.1K Dec 10 16:02 anaconda-ks.cfg 15 -rw-r--r--. 1 root root 22K... ...
  • Linux是單內核系統,可通用計算平臺的外圍設備是頻繁變化的,不可能將所有的(包括將來即將出現的)設備的驅動程式都一次性編譯進內核,為瞭解決這個問題,Linux提出了可載入內核模塊(Loadable Kernel Module,LKM)的概念,允許一個設備驅動通過模塊載入的方式,在內核運行起來之後" ...
  • 搭建環境:Centos6.5_x86_64,Zabbix2.4.5,epel 源 服務端: 1.安裝開發軟體包yum -y groupinstall "Development Tools" 2.安裝所需的依賴包yum -y install httpd mysql mysql-server mysql ...
  • ...
  • 原型設計模式: 用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。 原型設計模式簡單的來說,顧名思義, 不去創建新的對象進而保留原型的一種設計模式。 缺點:原型設計模式是的最主要的缺點就是這個克隆方法需要對類的功能進行檢測,這對於全新的類來說較容易,但對已有的類進行改造時將不是件容易的 ...
  • 轉自:http://www.jb51.net/article/42671.htm 在開始之前先說一點,DOM是非常容易理解的,但是大家說的太官方,讓人很是難於理解,我們就用非常簡單的語言翻譯一遍。加深對DOM的理解,從而對它有一個全面的認識。 什麼是DOM DOM的全稱是Document Objec ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...