色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > APK之間的互相調(diào)用

APK之間的互相調(diào)用 時間:2018-09-21      來源:未知

APK之間的互相調(diào)用,主要的實現(xiàn)方法就是通過intent.setComponent(componentName),

Java Code

// "包名","activity名"activity名需包含完整的路徑

componentName = new ComponentName("com.farsight.thisisthesecondone",

"com.farsight.thisisthesecondone.MainActivity");

Intent intent = new Intent();

intent.setComponent(componentName);

//告訴設(shè)備動作類型

intent.setAction("android.intent.action.MAIN");

//下邊這句話是獲取APP的特征值的

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

//開始跳轉(zhuǎn)

startActivity(intent);

在擁有兩個APK的源碼的情況下:

直接閱讀兩個源碼的androidmanifest.xml文件,找到其中的頭中的package=項,即為我們要調(diào)用的時候給ComponentName的構(gòu)造方法傳入的包名。找到,在頭中找到android:name=,即為我們要給ComponentName的構(gòu)造方法傳入的活動名(注:這里的活動名要完整的路徑)。

這里以兩個APP之間互相調(diào)用為例:

其中ThisIsTheFirstOne的androidmanifest.xml文件如下:

XML Code

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="//schemas.android.com/apk/res/android" 

package="com.farsight.thisisthefirstone"

android:versionCode="1"

android:versionName="1.0">

android:minSdkVersion="18"

android:targetSdkVersion="23" />

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme">

android:name=".MainActivity"

android:label="@string/app_name">

<intent-filter>

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

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

</intent-filter>

</activity>

</application>

</manifest>

在ThisIsTheFirstOne中的活動中我們只使用了一個按鈕,用來從這個APP跳到另一個APP。代碼如下:

Java Code

package com.farsight.thisisthefirstone;

import android.app.Activity;

import android.content.ComponentName;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainActivity extends Activity{

private Button btn;

private ComponentName componentName;

private String TAG = "This is the First";

@Override

protected void onCreate(Bundle savedInstanceState){

Log.d(TAG, "onCreate");

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btn = (Button) findViewById(R.id.btn);

btn.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View v){

// TODO Auto-generated method stub

// "包名","activity名"activity名需包含完整的路徑

componentName = new ComponentName("com.farsight.thisisthesecondone",

"com.farsight.thisisthesecondone.MainActivity");

Intent intent = new Intent();

intent.setComponent(componentName);

//告訴設(shè)備動作類型

intent.setAction("android.intent.action.MAIN");

//下邊這句話是獲取APP的特征值的

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

//開始跳轉(zhuǎn)

startActivity(intent);

}

});

}

@Override

protected void onDestroy(){

// TODO Auto-generated method stub

super.onDestroy();

Log.d(TAG, "onDestroy");

}

@Override

protected void onStart(){

// TODO Auto-generated method stub

super.onStart();

Log.d(TAG, "onStart");

}

@Override

protected void onRestart(){

// TODO Auto-generated method stub

super.onRestart();

Log.d(TAG, "onRestart");

}

@Override

protected void onResume(){

// TODO Auto-generated method stub

super.onResume();

Log.d(TAG, "onResume");

}

@Override

protected void onStop(){

// TODO Auto-generated method stub

super.onStop();

Log.d(TAG, "onStop");

}

@Override

protected void onPause(){

// TODO Auto-generated method stub

super.onPause();

Log.d(TAG, "onPause");

}

}

第二個APP中,我們的代碼大同小異,AndroidManifest.xml文件如下:

Java Code

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="//schemas.android.com/apk/res/android"

package="com.farsight.thisisthesecondone"

android:versionCode="1"

android:versionName="1.0" >

android:minSdkVersion="18"

android:targetSdkVersion="23" />

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

android:name=".MainActivity"

android:label="@string/app_name" >

<intent-filter>

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

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

</intent-filter>

</activity>

</application>

</manifest>

將兩個APK都install到設(shè)備中,進(jìn)行調(diào)試:

First打開:

點擊“我是第一個APP”,跳轉(zhuǎn)到第二個APP:

可以看到,這里第一個APP調(diào)用了onPause方法,然后調(diào)用了onStop方法,那么接下來我們直接在第二個APP中調(diào)用第一個APP:

可以看到,這里第一個APP又一次調(diào)用了onCreate方法,也就是說我們通過APK調(diào)用的時候是新建了一個APP,也就是說,在虛擬機(jī)中重新開了一個進(jìn)程,這個進(jìn)程和以前開過的同名APP沒有關(guān)系。為了驗證這一點,我們按硬件返回鍵:

現(xiàn)在有一個onDestroy被調(diào)用了。這個時候晚開的這個TestOne喚醒了睡眠狀態(tài)的另一個早開的TestOne而不是喚醒跳轉(zhuǎn)到它的TestTwo,這里是我們需要注意的一點。

其后我們再通過硬件返回鍵:

沒有TestOne了,TestTwo被喚醒,再按硬返回鍵退出結(jié)束TestTwo。

在只有一個APK的源碼的情況下

上邊討論的情況是我們知道兩個需要相互調(diào)用的APK的源碼的情況,可以看到,其實我們只是用到了androidManifest.xml中的包名和主活動名。

所以當(dāng)我們不知道一個APK的源碼,而又想通過程序調(diào)用這個APK的時候,我們只需要想辦法得到它的包名和主活動名即可。

方法就是通過一些APK反編譯軟件來實現(xiàn),推薦APK Multi-Tool工具,使用方法這里不做過多的介紹,反編譯之后可以在相應(yīng)的文件夾下找到相關(guān)的androidManifest.xml文件,和知道兩個APK的源碼的原理相同,代碼類似,這里不再贅述。

上一篇:對linux中的inotify機(jī)制的一點認(rèn)識

下一篇:integer與int的種種比較

熱點文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗分享
熱點新聞推薦
前臺專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號-5,京公海網(wǎng)安備11010802025203號

回到頂部

主站蜘蛛池模板: 黄色片网站免费在线观看 | 在线免费精品视频 | www.久久免费 | 中文字幕无码无遮挡在线看 | 最近免费中文字幕中文高清 | 国内精品久久久久久不卡影院 | 亚洲熟女www一区二区三区 | 4455永久在线观看 | 岳好紧好湿夹太紧了好爽 | 日本真人无遮挡啪啪免费 | 欧美日韩激情一级 | 国产成人片无码免费视频软件 | 欧美裸体xxxx极品 | 孩交VIDEOS精品乱子 | 无码h肉动漫在线观看 | 五月天婷五月天综合网 | 欧洲-级毛片内射 | 国产区图片区小说区亚洲区 | 777米奇影视盒 | 中国黄色片一级 | 日本视频又叫又爽 | 日韩精品 在线 国产 丝袜 | 国产在线看片无码不卡 | 亚洲精品无码成人a片 | 麻豆AV一区二区天美传媒 | 色综合伊人丁香五月桃花婷婷 | 亚洲AV国产AV综合AV卡 | 欧美日韩一区二区在线视频 | 国产欧美成人一区二区a片 最新欧美日韩 | 曰批免费视频播放免费 | 专干老熟女300部 | 国内精品伊人久久久久网站 | 国产日产亚洲系列最新 | 久久不见久久见免费视频7 BBW极度另类孕妇 | 97色偷偷色噜噜狠狠爱网站 | 亚洲精品无码成人A片在线 国产女人与公拘交在线播放 | 天堂8在线天堂资源BT | 欧美日韩乱一区二区三区 | 日韩A片无码毛片免费看 | 日本国产精品无码字幕在线观看 | 一个人免费观看视频www |