當前位置:首頁 » 安卓系統 » android把

android把

發布時間: 2025-02-06 22:24:18

⑴ android怎麼把其他app的內容分享到自己的app里

很多時候我們的應用在使用微信分享內容之後,希望其他用戶點擊該分享內容能夠跳轉到我們的App,以實現閉環,這樣的分享才是最有價值的。這種需求涉及到不同應用之間的交互,雖然微信提供了分享SDK,但仍然有不少限制,現在總結兩種在Android平台上初步認為可行的方案:

1.分享網頁,從分享的網頁跳轉回原App。

2.分享WXAppExtendObject類型的數據,且只能分享給好友,好友從聊天列表點擊收到的分享內容可以直接跳轉第三方App(前提是好友手機上已經安裝了該App)。下面來詳細說明兩個方案,由於是在項目中實測的,為了隱私及行文方便,假設我們的應用的名字為MyApp,效果截圖也就不再展示。

方案一:

從WebView(該WebView從屬於另一個App,並非我們自己的App)跳轉到MyApp的某個界面(這里以跳轉到MyApp的Acticity A為例)。具體的實現邏輯如下:

(1)該WebView顯示的網頁內容只是一個超鏈接,自定義了一個scheme=myapp://,後邊可以附加一些參數,如果需要從網頁向App傳值的話。

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>This is title</title>

</head>

<body>

<a href=』myapp://id=909624′>Jump to MyApp</a>

</body>

</html>

該網頁在WebView打開後就是一個簡單的超鏈接,截圖不再附。

(2)MyApp中的Activity A需要配置特定的infliter,如下:

<activity

<intent-filter>

<data android:scheme="myapp" />

<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />

<category android:name="android.intent.category.BROWSABLE"/>

</intent-filter>

</activity>

(3)當在WebView上點擊上述自定義的超鏈接時就可以打開MyApp的A界面,所傳遞的參數也可以在所跳轉到的Activity中獲取,方法如下:

getIntent().getScheme();//獲得Scheme名稱

getIntent().getDataString();//獲得Uri全部路徑,根據自定義的格式解析字元串即可獲取我們上面附加的參數。可行的實施方案:

MyApp中調用微信分享分享網頁內容,只需要在網頁中嵌入跟Android客戶端約定好的超鏈接協議scheme,那麼點擊時就可以跳轉到MyApp。

問題1:如果用戶安裝了MyApp,就可以點擊網頁跳轉,如果沒有安裝MyApp的話,WebView就會提示找不到該頁面。製作網頁時可以在網頁中做檢測,沒安裝MyApp的話,頁面就重定向到應用的下載頁面。

問題2:在普通App的WebView中和瀏覽器中上述機制是可以的,但是在微信的WebView是不可以點擊直接跳轉我們的應用的,可能是微信做了某些過濾,且僅僅支持跟微信有深度合作的應用的跳轉,如大眾點評是可以的。針對這種情況,我們可以引導用戶使用瀏覽器打開所分享的網頁,然後點擊就可以跳轉應用了。方案二:

使用微信SDK分享WXAppExtendObject數據給好友,好友點擊跳轉MyApp的某個頁面(需要在分享時傳遞構造跳轉Intent的參數)。

1.該類型的分享(具體請參考微信分享SDK)可以帶幾個參數,參數中必須附帶一些構造跳轉Intent的數據。

2.好友點擊分享的內容,回調IWXAPIEventHandler介面的類的onReq方法,具體為

ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:這種情況才會調用,此時可以取出分享時附帶在參數中的一些數據,構造一個跳轉Intent,調用startActivity(intent) 來打開MyApp。

由於是項目實測,這種實現方式的截圖也就不傳了。

問題1:該分享方式只能分享給好友,不能分享到朋友圈。

問題2:如果好友沒安裝MyApp,點擊微信中好友分享過來的消息後無反應,無法提醒「未安裝MyApp,請下載」,因為這些邏輯要實現的話本身就是在MyApp裡面寫的,原本沒裝的話根本無法檢測。

問題3:WXAppExtendObject類型的分享,數據有大小限制,

extInfo(String)限制2KB;

fileData(byte[])供第三方使用的文件二進制數據,最大10M;

filePath:(String)Local directory of the file provided for applications,本身長度最大10KB,文件大小同上,不超過10M。以上就是Android平台好友點擊微信分享的內容後跳轉來源App的兩種實現方案,各有優點和局限性,請根據自身業務需求選擇合適的分享方式,由於未能附截圖說明,如有哪裡表述不清楚的,歡迎留言討論。

⑵ android 怎麼把進程結束掉

1、自己結束自己 this.finish();

2、killProcess(int pid)
例子:android.os.Process.killProcess(android.os.Process.myPid());
對於這個方法,需要詳細解釋一下。在SDK的文檔中,解釋如下:
Kill the process with the given PID. Note that, though this API allows us to request to kill any process based on its PID, the kernel will still impose standard restrictions on which PIDs you are actually able to kill. Typically this means only the process running the caller's packages/application and any additional processes created by that app; packages sharing a common UID will also be able to kill each other's processes.
英語不好,不能准確翻譯,所以希望大家自己理解,免得對大家造成誤解。我個人對這句話的解釋就是,這個方法使用是有條件的:
a、將被殺掉的進程 和 當前進程 處於同一個包或者應用程序中;
b、將被殺掉的進程 是由當前應用程序所創建的附加進程;
c、將被殺掉的進程 和 當前進程 共享了普通用戶的UID。(這里的普通用戶,是相對於Root許可權的用戶來說的)

3、System.exit(int code)
例子:System.exit(0);
該方法只能用於結束當前進程自身,個人覺得在程序遇到異常,無法正常執行時,可以通過這個方法強制退出。
需要注意的是,這兩個方法,會導致進程非正常退出,就是說,進程退出時不會去執行onPause、onStop和onDestroy方法,那麼進程很有可能錯過了保存數據的機會。因此,這兩個方法最好使用在出現異常的時候!

4、killBackgroundProcesses(String packageName)
要通過一個進程去結束另一個進程。在之前的SDK版本中,一直使用方法restartPackage(packageName)方法,但是在Android的開發文檔中介紹說,這個函數會導致一些問題( the previous behavior here is no longer available to applications because it allows them to break other applications by removing their alarms, stopping their services, etc.),所以建議大家使用一個新的方法:
由於這個方法沒有返回值,所以我們也不知道我們的目標進程是否真的退出了。但是,我目前只發現了這個可以結束另一個進程的方法。此方法需要許可權:
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

5、利用反射調用forceStopPackage來結束進程

Java代碼
Method forceStopPackage = am.getClass().getDeclaredMethod("forceStopPackage", String.class);
forceStopPackage.setAccessible(true);
forceStopPackage.invoke(am, yourpkgname);

注意:
需要在manifest里加上shareid定義:android:sharedUserId="android.uid.system"
需要在manifest里加上許可權:<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"></uses-permission>
需要採用系統platform簽名,因為需要用FORCE_STOP_PACKAGES許可權,該許可權只賦予系統簽名級程序,然後經編譯環境重新編譯,即可實現強制停止指定程序(本人親自驗證可行)

6、killall -HUP packageName || kill -9 pid

Java代碼
String cmd="killall -HUP com.android.test";
try {
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader in = new BufferedReader(new InputStreamReader(
process.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println("exec shell: == " + line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

此方法理論上可行,但是應該需要系統級或底層的協助

熱點內容
金蝶修改伺服器地址 發布:2025-02-07 00:41:08 瀏覽:866
安卓手機版的蒸汽平台在哪裡下載 發布:2025-02-07 00:29:04 瀏覽:453
php自學中心 發布:2025-02-07 00:28:50 瀏覽:270
手機卡在哪裡設置密碼 發布:2025-02-07 00:21:25 瀏覽:706
解壓哄睡音頻 發布:2025-02-07 00:19:56 瀏覽:158
資料庫系統第六版答案 發布:2025-02-07 00:06:10 瀏覽:970
fut加密毛發怎麼樣 發布:2025-02-07 00:06:01 瀏覽:868
java三目表達式 發布:2025-02-06 23:58:41 瀏覽:742
android開啟wifi 發布:2025-02-06 23:50:08 瀏覽:496
騰訊雲伺服器是不是只有c盤 發布:2025-02-06 23:50:03 瀏覽:473