毕设记录(三)

第二讲

添加意图

在添加意图之前的准备工作:目前只有一个窗口,因此要新建一个(?),可以叫SecondActivity,具体方法如下

那么这就相当于新的一个界面了,在新的界面中,我们可以看到与之前的初始界面一样的onCreate,里面同样有
setContentView(R.layout.activity_second);//加载布局
我们可以看到Mainifests文件中,AS已经帮我们创建好第二个活动了
<activity android:name=".SecondActivity"></activity>
分析第一个活动的信息:

<!-- 间接寻址 -->
        <activity android:name=".MainActivity">
            <!-- 意图过滤器 -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <!--主Activity-->
                <category android:name="android.intent.category.LAUNCHER" />
                <!--发射器,应用程序中首先调被启动的-->
            </intent-filter>
        </activity>

我们也可以仿照设计第二个活动

显示Intent

我们想要的功能是点击按钮打开第二个页面

在点击按钮那里添加

//显示Intent,指名道姓的说想要调用那个意图
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
//意图自己不会启动,手动启动
startActivity(intent);

隐式Intent

在Mainifest中添加:

<activity android:name=".SecondActivity">
      <intent-filter>
          <action android:name="android.intent.action.START_ACTION"/>
          <category android:name="android.intent.category.DEFAULT"/>
      </intent-filter>
</activity>

其中,action_name可以自己起(?)
在MainActivity处添加:

//隐式Intent
Intent intent=new Intent("android.intent.action.START_ACTION");
//第一个参数为活动名,最好复制,第二个为category,因为是default所以不写
startActivity(intent);

通过隐式Intent调用系统应用

以拨号为例

//通过隐式Intent调用系统应用
Intent intent =new Intent();
intent.setAction(Intent.ACTION_CALL);//调用拨号系统应用
intent.setData(Uri.parse("tel:15665869115"));//给他数据
startActivity(intent);

运行发现报错

查看错误信息

发现是没有申请用户权限,在Mainifest中,application外面添加:

<!-- 向用户申请打电话的权限 -->
<uses-permission android:name="android.permission.CALL_PHONE"/>

再次运行,发现还是不报错,原因是我们没有在手机中打开权限,app只是申请了,但是我们没有给他
在设置的应用权限中找到应用,在所有应用中找到,我们的app给他打开打电话的权限即可
再次运行成功

intent.setAction(Intent.ACTION_DIAL);//调用拨号系统应用

DIAL和CALL的区别如图:

一些诸如此类的调用

  • 打开设置窗口
intent.setAction("android.settings.SETTINGS");//打开设置
  • 打开联系人列表
intent.setAction("com.android.contacts.action.LIST_CONTACTS");//打开联系人列表

具体其他的可见文档。

用Intent传递数据

用到的是intent.putExtra()
可以看到有很多的重载方法

Main向SecondActivity传递

在Main中添加显示Intent如下:

Intent intent=new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("Data","Hello SecondActivity");//名为Data,值为"Hello SecondActivity"
startActivity(intent);

这只是完成了传出,同时SecondActivity还要接受

//新建intent但是不用new,是getIntent(),接收来自intent的数据
Intent intent = getIntent();
//接收名称为Data的数据
String data=intent.getStringExtra("Data");
//用日志打印一下检验是否接收成功,标签,传递的(显示的)数据
Log.d("SecondActivity",data);

日志信息如下

从SecondActivity向Main传递

Main中添加:

Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent,1);//1是用来区别请求和响应的

同时接收

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        //super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case 1:
                if (resultCode == RESULT_OK) {
                    String resultData = data.getStringExtra("data_return");
                    Log.d("MainActivity", resultData);
                }
                break;
        }
    }

而SecondActivity作为发送方,需要在按钮添加监听以达到点击跳转并发送数据的目的:

 /*
初始化窗口
*/
    public void initView(){
        button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("data_return","Hello MainActivity");
                setResult(RESULT_OK,intent);//RESULT_OK=-1
                finish();//关闭窗口
            }
        });
    }

别忘了将initView方法添加到onCreat方法中。
可以看到运行:

原文地址:https://www.cnblogs.com/LOW-ctfer/p/14268625.html