一、关键词:android tv 手柄控制人物行走
二、关键词:android四大组件
Android四大组件、五大存储、六大布局、七大生命周期、八大基本数据类型
四大组件:Activity、BroadcastReceive、Service、Content Provider ;
五大存储: SharedPreferences、SDCard 、SQLite数据库存储数据、使用ContentProvider存储数据、IO存储 ;
六大布局 :LineartLayout 、FrameLayout 、TableLayout 、 RelativeLayout 、 AbsoluteLayout 、 GridLayout ;
七大生命周期 :onCrate 不可见不可交互、 onStart 可见不可交互 、 onResume 可见可交互 、 onPause 可见不可交互 、onStop 不可见不可交互 、 onDestroy 销毁了 、 onRestart 从不可见到可见 ;
八大基本数据类型 : short 短整型 、 int 整型 、 long 长整型 、 float 浮点型 、 char 字符型 、 boolean 布尔型 、 byte 字节型
————————————————
版权声明:本文为CSDN博主「懒笑翻」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/c_lanxiaofang/article/details/80602840
三、关键词:activity_main.xml
android开发笔记:MainActivity.java与activity_main.xml
onCreate方法主要是初次启动(指使用这个类)首先加载的方法。看清楚一个关键词:首先。也就是这个方法具有以下特点:就运行一次,而且是最先运行。
做个对比,其实就是写java练习代码里面的main方法,首次加载进入的入口就在这里。其实可以想到,开发这个SDK的人,肯定就是封装了main方法,被他封装了成在android SDK上叫做onCreate。@Override中文意思就是重写,在java里面我们继承来的,我们要使用就要重写,也就是重写嘛。覆盖掉原来的oncreate方法,我们帮他重写一个oncreate,按照我的想法去执行这个方法。//意思着我们要先调用一个对象的父对象上的函数,也就是AppCompatActivity super.onCreate(savedInstanceState);现在才讲到正轨:
MainActivity.java和activity_main.xml如何建立联系:
setContentView(R.layout.activity_main);
方法名setContentView的意思看的出来,启动内容视图“用”布局文件activity_main.xml。
四、关键词:savedInstanceState
onCreate中的savedInstanceState有何具体作用
在activity的生命周期中,只要离开了可见阶段,或者说失去了焦点,activity就很可能被进程终止了!,被KILL掉了,,这时候,就需要有种机制,能保存当时的状态,这就是savedInstanceState的作用。
当一个Activity在PAUSE时,被kill之前,它可以调用onSaveInstanceState()来保存当前activity的状态信息(在paused状态时,要被KILLED的时候)。用来保存状态信息的Bundle会同时传给两个method,即onRestoreInstanceState() and onCreate().
五、android开发中监听器的三种实现方法(OnClickListener)
Button btn2=(Button)findViewById(R.id.button2);
btn2.setOnClickListener(new MyListener());
以上放入ON create中,以下是内部类
1 class MyListener implements View.OnClickListener{ 2 @Override 3 public void onClick(View v) { 4 Toast.makeText(MainActivity.this,"you have clicked Button2",Toast.LENGTH_SHORT).show(); 5 } 6 }
六、失败的教训
1.内部类不可用于Activity的这种情况,U2A沟通失败
public mylibrary1(String appid, MyAct act) { this.activity = act; StringBuffer param = new StringBuffer(); param.append("appid=" + appid); param.append(","); param.append("engine_mode=msc"); SpeechUtility.createUtility(this.activity.getApplicationContext(), param.toString()); this.mToast = Toast.makeText(this.activity, "欢迎来到智慧乐园!", Toast.LENGTH_SHORT); this.mToast.show(); } abstract class MyAct extends Activity{ @Override public boolean dispatchKeyEvent(KeyEvent event) { if(event.getRepeatCount() > 0){ UnityPlayer.UnitySendMessage("Canvas","TU2A","你,按了好多次了!!!"); return true; } return super.dispatchKeyEvent(event); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // 当按下返回键时所执行的命令 if (keyCode == KeyEvent.KEYCODE_DPAD_UP) { // 此处写你按返回键之后要执行的事件的逻辑 UnityPlayer.UnitySendMessage("Canvas","TU2A","你,按了,UP好多次了!!!"); return super.onKeyDown(keyCode, event); } return super.onKeyDown(keyCode, event); } }
只有当
jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo1 = new AndroidJavaObject("com.unity3d.player.mylibrary1", "5b508fb6", jo);
与
public mylibrary1(String appid, Activity act) {
this.activity = act;
StringBuffer param = new StringBuffer();
param.append("appid=" + appid);
param.append(",");
param.append("engine_mode=msc");
SpeechUtility.createUtility(this.activity.getApplicationContext(), param.toString());
this.mToast = Toast.makeText(this.activity, "欢迎大涛、二涛来到智慧乐园!", Toast.LENGTH_SHORT);
this.mToast.show();
}
二者平级,同为android.app.Activity的类时,方可U2A沟通有效。
2.通过直接导出Activity类未成功。后增加空的Activity,重新打包,出现错误,提示:
error: invalid file path ‘C:\Users\n1781\MyApplication3\mylibrary\build\intermediates\manifests\aapt\release\AndroidManifest.xml‘.
查阅:https://blog.csdn.net/weixin_39513118/article/details/84971693的博文,删除了app下的build文件夹,果然成功!