Android——Log,Toast提示框,Intent跳转
Log
- Log.v()。verbose,详细,啰嗦;打印所有日志。
- Log.d()。debug。
- Log.i()。info。
- Log.w()。warn。
- Log.e()。error。
使用:Log.d("tag:一般传入当前Activity","想要打印的具体内容");
查看:通过下方提示,也可以自定义过滤器。
Toast
一种Android提供的提醒方式。
举例:
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_layout); Button button1 = findViewById(R.id.button_1); //findView获取监听的元素 button1.setOnClickListener(new View.OnClickListener() { //设置监听器 @Override public void onClick(View v) { //makeText里的三个参数:(Context,Toast文本,显示时长),暂时不懂Context(上下文)是个什么东西。 Toast.makeText(MainActivity.this,"你再戳一次试试!",Toast.LENGTH_SHORT).show(); } });}
跳转页面——显式、隐式Intent
intent,意图;分显式和隐式,显式就是指明由谁跳转到谁,隐式是匹配action
和category
(这俩源自AndroidManifest.xml各个active的
里或Android系统内置action),然后由用户选择响应哪个活动。隐式举例:打开一个链接,系统通过action
和category
匹配到系统浏览器、chrome等多个活动都满足条件,然后手机就会提示你用哪个浏览器打开该链接。
1.显式intent,直接指明由A跳转到B。
Intent intent = new Intent(A.this,B.class); //定义一个intentstartActivity(intent); //启动intent
2.隐式intent。
第一步.在AndroidManifest
的activity
标签里定义action
和category
。
第二步.某intent匹配action
和category
,响应该活动。
举例如下:首先,要这样。
其次,要这样。
Intent intent = new Intent("com.example.activitytest.ACTION_START");//对应(1)action里的字符串 startActivity(intent);
由于category是.DEFAULT
默认的,所以intent匹配时只对应action
就行了。
如果要在intent里表示category
,可以在上面第二步的中间加一行。
Intent intent = new Intent("com.example.activitytest.ACTION_START"); //对第一步action里的字符串 //此处增加如下category信息。相应的也要在AndroidManifest的某活动(Activity)的标签里注册BALABALA这个category。 intent.addCategory("com.example.activitytest.BALABALA") startActivity(intent)
3.更多隐式Intent的用法
隐式Intent不仅可以调用自己程序里的活动(Activity),还可以启动其他程序的活动(Activity)。例如启动浏览器、拨号等,这些程序系统已经内置ACTION,直接用隐式intent匹配、调用就行了,不需要自己实现。例如浏览器的action是:Intent.ACTION_VIEW
;拨号的action是Intent.ACTION_DIAL。
举例如下:调用浏览器。
啊┗|`O′|┛ 嗷~~,模拟器连不上网,于是网上找解决方法,有重启的、有改DNS,嫌麻烦,我直接清空模拟器数据,相当于手机恢复出厂设置,神了个奇。
书接正文,开始调用Android其他程序。
注释:Uri.parse的作用是解析字符串,下面这个例子是http协议,所以转为URL;如果调用“拨号”程序,则data部分(举例:tel:10086)根据tel协议和后面号码打开系统拨号界面。
打开浏览器:
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_layout); Button button1 = findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_VIEW); //第一行 intent.setData(Uri.parse("http://www.baidu.com")); //第二行,Uri.parse将字符串转为URL,作为参数传入setData()方法。 startActivity(intent); //第三行 } });}
打开拨号界面:
Intent intent = new Intent(Intent.ACTION_DIAL);intent.setData(Uri.parse("tel:10086"));startActivity(intent);
带数据的跳转
A向下一个活动B传递数据
A传出数据:intent.putExtra();
Intent提供了一系列putExtra()方法传递数据,该方法包含俩参数:键值对。前面"键"相当于起个名字,方便其它活动用这个名字调用数据,后面“值”才是真正要传输的数据。
B取出数据:getStringExtra、getIntExtra、getBooleanExtra等,依此类推。
intent = getIntent();String data = intent.getStringExtra("extra_data")Log.d("SecondActivity",data)
A向B发送数据:再戳一下试试!
A用startActivityForResult()方式启动B,B向A传递数据
A:先在onCreate()里用startActivityForResult()启动B,当 B finish();
后返回A的onActivityResult()
方法。
onActivityResult()
方法里有三个参数:第一个requestCode,本活动onCreate
里startActivityForResult(intent,1)
里的1;第二个resultCode,B里setResult()
的RESULT_OK或RESULT_CANCELED;data,B传出来的intent。结果如图表示:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_layout); Button button1 = findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String data = "再戳一下试试!"; Intent intent = new Intent(MainActivity.this,SecondActivity.class); startActivityForResult(intent,1); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { switch (requestCode) { case 1: if (resultCode == RESULT_OK) { String returnedData = data.getStringExtra("data_return"); Log.d("MainActivity", returnedData); } break; default: } }}
B:通过监听button返回消息并且finish,或者通过手机下方Back键(onBackPressed()
)返回。
返回消息:setResult()方法接受两个参数,第一个一般是RESULT_OK或RESULT_CANCELED,第二个是带有data的intent。
当B活动销毁finish
时,请看上面onActivityResult()方法。
public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_layout); Button button2 = findViewById(R.id.button_2); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //通过APP内Button返回 Intent intent = new Intent(); intent.putExtra("data_return", "试试就试试"); setResult(RESULT_OK, intent); finish(); } }); } @Override public void onBackPressed() { //通过手机下方Back键返回 Intent intent = new Intent(); intent.putExtra("data_return", "试试就试试"); setResult(RESULT_OK, intent); finish(); }}
这篇随笔参考《第一行代码——Android》+本人学习时所犯错误总结而成,环境是Android Studio 3.3.1。
更多相关文章
- 设备的search按钮调用自己程序的search模块
- android和js互相调用的问题
- Android调用微信登陆、分享、支付(第二版本)
- android 的skia 图形引擎库
- Android(安卓)上的 Scala, 实战之路(二)——Hello World即遭不测
- Android(安卓)Content Provider在应用程序之间共享数据的原理分
- Android实现登录界面记住密码的存储
- 修改apk调用蓝牙无明确提示
- Android(安卓)OpenCV 安装与配置+JNI开发