99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙APP與Android APP的關(guān)系解析

鴻蒙系統(tǒng)HarmonyOS ? 來源:CSDN 博主 ? 作者:87年的90后 ? 2021-01-28 11:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

昨天跑通了鴻蒙的helloWord,蠻高興的,正準(zhǔn)備繼續(xù)深入的時候,在網(wǎng)上看到這樣一篇文章

我按照文章的說法復(fù)盤了一下,貼出代碼,供大家交流。

1.當(dāng)helloWord跑起來后,在build\intermediates\shell\debug\src\main目錄下確實有Android 代碼

o4YBAGASLJmAUA74AABnoYFLRNE742.png

2、打開AndroidManifest.xml文件,可以看到Android配置信息

o4YBAGASLK-ABWUHAAGZVTqu54A186.png

3、打開配置文件指向的ShellMyApplication.java文件,發(fā)現(xiàn)ShellMyApplication繼承了HarmonyApplication

pIYBAGASLMaAcjBfAAB3S42dbi0279.png

4、按住Ctrl點擊HarmonyApplication,進(jìn)入HarmonyApplication類,并定位,發(fā)現(xiàn)依賴包,可以看到在依賴包里有對Android Application和三大組件的代理類

o4YBAGASLN2AEmqxAAHdoAQWjYc900.png

5、進(jìn)入AbilityShellActivity類,可以看到對Android Activity的代理

o4YBAGASLPqAGZ5xAAGEWPNbKCI985.png

6、根據(jù)這些情況,實際上,我們可以在鴻蒙的項目里寫Android代碼,首先引入Android依賴包

implementation 'com.google.android:android:4.1.1.4'

pIYBAGASLRCARfmNAACX65SAsUs502.png

7、在MyApplication類中獲取Android的Application

public class MyApplication extends AbilityPackage {

@Override

public void onInitialize() {

super.onInitialize();

}

public static Application getApp(){

try {

return (Application)Class.forName("android.app.ActivityThread").getMethod("currentApplication").invoke(null,(Object[])null);

}catch (Exception e){

e.printStackTrace();

}

return null;

}

}

8、嘗試輸出Android Log和Toast并成功

public class MainAbility extends Ability {

private Application application;

@Override

public void onStart(Intent intent) {

super.onStart(intent);

super.setMainRoute(MainAbilitySlice.class.getName());

application=MyApplication.getApp();

Log.e("來自Android的Log",application.getClass().getName());

Toast.makeText(application,"Android吐司",Toast.LENGTH_LONG).show();

}

}

pIYBAGASLSeAeukdAAFB7TdCQyI383.png

9、監(jiān)聽Android Activity的生命周期,日志現(xiàn)實當(dāng)前Activity是MainAbilityShellActivity,就是build目錄里的Activity

MyApplication.getApp().registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {

@Override

public void onActivityCreated(Activity activity, Bundle bundle) {

Log.e("來自Android的Log","onActivityCreated------>"+activity.getClass().getName());

}

@Override

public void onActivityStarted(Activity activity) {

Log.e("來自Android的Log","onActivityStarted------>"+activity.getClass().getName());

}

@Override

public void onActivityResumed(Activity activity) {

Log.e("來自Android的Log","onActivityResumed------>"+activity.getClass().getName());

}

@Override

public void onActivityPaused(Activity activity) {

Log.e("來自Android的Log","onActivityPaused------>"+activity.getClass().getName());

}

@Override

public void onActivityStopped(Activity activity) {

Log.e("來自Android的Log","onActivityStopped------>"+activity.getClass().getName());

}

@Override

public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

Log.e("來自Android的Log","onActivitySaveInstanceState------>"+activity.getClass().getName());

}

@Override

public void onActivityDestroyed(Activity activity) {

Log.e("來自Android的Log","onActivityDestroyed------>"+activity.getClass().getName());

}

});

o4YBAGASLTuAcZS8AABB3LUsJpw840.png

10、用Android代碼調(diào)用Android系統(tǒng)APP設(shè)置頁面

android.content.Intent intent1=new android.content.Intent();

intent1.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK);

intent1.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");

intent1.setData(Uri.fromParts("package", MyApplication.getApp().getPackageName(), null));

MyApplication.getApp().startActivity(intent1);

11、用Android代碼調(diào)用Android系統(tǒng)撥號頁面

android.content.Intent intent1=new android.content.Intent(android.content.Intent.ACTION_DIAL,Uri.parse("tel:123456789"));

intent1.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK);

MyApplication.getApp().startActivity(intent1);

12、最后,在鴻蒙的Ability上添加Android控件

MyApplication.getApp().registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {

@Override

public void onActivityCreated(Activity activity, Bundle bundle) {

Log.e("來自Android的Log","onActivityCreated------>"+activity.getClass().getName());

}

@Override

public void onActivityStarted(Activity activity) {

Log.e("來自Android的Log","onActivityStarted------>"+activity.getClass().getName());

}

@Override

public void onActivityResumed(Activity activity) {

Log.e("來自Android的Log","onActivityResumed------>"+activity.getClass().getName());

FrameLayout frameLayout=(FrameLayout)activity.getWindow().getDecorView().findViewById(android.R.id.content);

View view=frameLayout.findViewById(1);

LinearLayout linearLayout;

if (view instanceof LinearLayout){

linearLayout=(LinearLayout)view;

}

else {

linearLayout=new LinearLayout(activity);

linearLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));

linearLayout.setOrientation(LinearLayout.VERTICAL);

frameLayout.addView(linearLayout);

}

TextView textView=new TextView(activity);

textView.setText("來自Android的TextView");

textView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));

linearLayout.addView(textView);

android.widget.Button button=new android.widget.Button(activity);

button.setText("來自Android的button");

button.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));

linearLayout.addView(button);

}

@Override

public void onActivityPaused(Activity activity) {

Log.e("來自Android的Log","onActivityPaused------>"+activity.getClass().getName());

}

@Override

public void onActivityStopped(Activity activity) {

Log.e("來自Android的Log","onActivityStopped------>"+activity.getClass().getName());

}

@Override

public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

Log.e("來自Android的Log","onActivitySaveInstanceState------>"+activity.getClass().getName());

}

@Override

public void onActivityDestroyed(Activity activity) {

Log.e("來自Android的Log","onActivityDestroyed------>"+activity.getClass().getName());

}

});

編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3973

    瀏覽量

    130316
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    Android App環(huán)境檢測分析

    這個原理就是APPAndroidManifest.xml文件中application是否配置了android:debuggable="true",設(shè)置true支持動態(tài)調(diào)試
    的頭像 發(fā)表于 12-01 10:26 ?1299次閱讀

    Android APP如何進(jìn)行訪問硬件驅(qū)動

    本文我們要講的是在用 i.MX8 平臺開發(fā)時,Android APP 如何進(jìn)行訪問硬件驅(qū)動。
    的頭像 發(fā)表于 12-04 13:50 ?2476次閱讀
    <b class='flag-5'>Android</b> <b class='flag-5'>APP</b>如何進(jìn)行訪問硬件驅(qū)動

    java后端能轉(zhuǎn)鴻蒙app開發(fā)嗎

    java后端轉(zhuǎn)鴻蒙app開發(fā)好。 還是前端呢
    發(fā)表于 01-29 18:15

    鴻蒙適配APP要用什么開發(fā)語言?!

    請問為鴻蒙適配APP要用什么開發(fā)語言???
    發(fā)表于 09-18 15:48

    BootLoader和APP之間的關(guān)系

    STM32單片機BootLoader掃盲BootLoader和APP之間的關(guān)系APP就是平時寫的單片機上的應(yīng)用程序,而BootLoader本質(zhì)上和APP一樣,也是平時寫的應(yīng)用程序
    發(fā)表于 12-09 06:01

    請問開發(fā)鴻蒙App的意義在哪里?

    這個問題也可以認(rèn)為是鴻蒙原生AppAndroid App有什么區(qū)別,如果沒有區(qū)別,本來Android開發(fā)好的應(yīng)用,干嘛還要再去開發(fā)一遍
    發(fā)表于 04-13 11:10

    請問如何選擇鴻蒙App開發(fā)的編程語言?

    如何選擇鴻蒙App開發(fā)的編程語言
    發(fā)表于 04-13 11:15

    探析工業(yè)APP諸多要素的關(guān)系與內(nèi)涵

    導(dǎo)讀工業(yè)APP是什么?工業(yè)技術(shù)軟件化是什么?是如何產(chǎn)生的?兩者有什么關(guān)系?與工業(yè)軟件有什么關(guān)系?
    的頭像 發(fā)表于 12-10 15:18 ?3646次閱讀

    基于AndroidAPP安全檢測技術(shù)淺析

    基于AndroidAPP安全檢測技術(shù)淺析
    發(fā)表于 06-28 16:03 ?16次下載
    基于<b class='flag-5'>Android</b>的<b class='flag-5'>APP</b>安全檢測技術(shù)淺析

    Java代碼加密支持Android App Bundle動態(tài)化框架

    傳統(tǒng)App加殼技術(shù)無法應(yīng)用在App Bundle模式生成的數(shù)據(jù)包之上。然而,幾維安全推出的Java2C加固方案完美支持Android App Bundle動態(tài)化框架,守護(hù)企業(yè)的核心代碼
    的頭像 發(fā)表于 07-29 16:13 ?2574次閱讀
    Java代碼加密支持<b class='flag-5'>Android</b> <b class='flag-5'>App</b> Bundle動態(tài)化框架

    Android 12“App Pairs”功能:改造分屏多任務(wù)能力

    Android 12“App Pairs”功能:新分屏多任務(wù)能力,安卓,app,谷歌,分屏,應(yīng)用程序
    發(fā)表于 02-04 14:45 ?1880次閱讀

    基于Android的果蠅識別APP

    本文檔的主要內(nèi)容詳細(xì)介紹的是基于Android的果蠅識別APP采用隨機森林,神經(jīng)網(wǎng)絡(luò)等多種算法。
    發(fā)表于 03-01 09:28 ?6次下載

    利用機智云的Android開源app修改教程

    進(jìn)行以下操作之前請確保已經(jīng)在機智云中創(chuàng)建了一個產(chǎn)品,下面點擊添加應(yīng)用,選擇Android生成一個app應(yīng)用 然后按照提示,將密匙填入到相應(yīng)位置,具體參考我上一篇博客,點擊下載,將app工程下載到本地 2、Andriod方面處理
    的頭像 發(fā)表于 07-05 10:39 ?2738次閱讀

    鴻蒙APP開發(fā)鴻蒙權(quán)限請求框架

    /posts/5165 權(quán)限控制是在進(jìn)行 HarmonyOS 應(yīng)用開發(fā)中非常重要的一個環(huán)節(jié),幾乎所有的商業(yè)應(yīng)用中都會涉及到。 我們在曾經(jīng)使用的 Android app 應(yīng)用中經(jīng)常會遇到一些 app 會彈
    的頭像 發(fā)表于 09-28 09:19 ?3496次閱讀

    Android App開發(fā)新選擇:使用Chaquopy輕松結(jié)合Python

    當(dāng)今的程式開發(fā)中,Python已經(jīng)成為了一個非常流行的語言,因為它可以快速編寫出高效的代碼。然而,如果要將Python結(jié)合到Android App(應(yīng)用程式)中,需要進(jìn)行一些復(fù)雜的設(shè)置和調(diào)整
    的頭像 發(fā)表于 04-25 20:29 ?2946次閱讀
    <b class='flag-5'>Android</b> <b class='flag-5'>App</b>開發(fā)新選擇:使用Chaquopy輕松結(jié)合Python