Log.d("tag:一般传入当前Activity","想要打印的具体内容");
一种Android提供的提醒方式。
举例:
@Override
protected 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,意图;分显式和隐式,显式就是指明由谁跳转到谁,隐式是匹配action
和category
(这俩源自AndroidManifest.xml各个active的
里或Android系统内置action),然后由用户选择响应哪个活动。隐式举例:打开一个链接,系统通过action
和category
匹配到系统浏览器、chrome等多个活动都满足条件,然后手机就会提示你用哪个浏览器打开该链接。
1.显式intent,直接指明由A跳转到B。
Intent intent = new Intent(A.this,B.class); //定义一个intent
startActivity(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协议和后面号码打开系统拨号界面。
打开浏览器:
@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) {
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传出数据:intent.putExtra();
Intent提供了一系列putExtra()方法传递数据,该方法包含俩参数:键值对。前面"键"相当于起个名字,方便其它活动用这个名字调用数据,后面“值”才是真正要传输的数据。
B取出数据:getStringExtra、getIntExtra、getBooleanExtra等,依此类推。
intent = getIntent();
String data = intent.getStringExtra("extra_data")
Log.d("SecondActivity",data)
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。