移动互联网开发技术教学网站项目研究第十二篇

2021@SDUSC

webview项目剩余代码分析

 protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.b_activity_main);
        webView=findViewById(R.id.webview_b);
        String data="<!doctype html>\n" +
                "<html><head><meta charset=\"utf-8\"><title>无标题文档</title></head>\n" +
                "<body><h1>hello world</h1></body>\n" +
                "</html>\n";
        webView.loadData(data,"text/html","utf-8");

    }

这是项目的另一个加载网页的类,规定了网页的布局,然后加载一个无标题网页,比较简单。

webview项目总结

项目主要介绍了如何在Android加载网页功能,通过部分代码演示了如何简单加载一个网页,可以使教学网站使用者较快掌握简单的网页加载方法,简单明了适合初学者。

Android主要组件补充

Intent未涉及部分说明

Intent 是一个消息传递对象,可以用来从其他应用组件请求操作。项目中多次使用Intent传递组件间消息。可以通过多种方式促进组件之间的通信。下面代码是音乐播放器项目中使用Intent传递切换组件类的信息。

if(v.getId() == R.id.btn_backlist){
            unbind(isUnbind);
            isUnbind = true;
            Intent intent3 = new Intent();
            intent3.setClass(MusicActivity.this, Music_List.class);
            startActivity(intent3);
        }

下面是传递消息的过程:

name = intent1.getStringExtra("song_name");
singer = intent1.getStringExtra("singer");
        //写入TextView中
thesong_name.setText(name);
thesong_singer.setText(singer);

        //创建意图对象
 intent2 = new Intent(this, MusicService.class);

分类:
显式Intent:通过组件名指定启动的目标组件,比如startActivity(new Intent(A.this,B.class)); 每次只会启动一个组件。
隐式Intent:不指定组件名,而指定Intent的Action,Data,或Category,当我们启动组件时, 会去匹配AndroidManifest.xml相关组件的Intent-filter,逐一匹配出满足属性的组件,当不止一个满足时, 会弹出一个对话框,选择启动哪一个组件。
在这里插入图片描述

使用方法:
1、启动 Activity
Activity 表示应用中的一个屏幕。通过将 Intent 传递给 startActivity() ,可以启动新的 Activity实例。Intent 用于描述要启动的 Activity,并携带任何必要的数据。
如果希望在 Activity 完成后收到结果,可以调用 startActivityForResult() 。在 Activity 的onActivityResult() 回调中, Activity 将结果作为单独的 Intent 对象接收。
2、启动服务
Service 是一个不使用用户界面而在后台执行操作的组件。通过将
Intent 传递给 startService() ,可以启动服务执行一次性操作(例如,下载文件)。Intent 用于描述要启动的服务,并携带任何必要的数据。如果服务旨在使用客户端-服务器接口,则通过将 Intent 传递给 bindService() ,可以从其他组
件绑定到此服务。
3、传递广播
广播是任何应用均可接收的消息。系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播。通过将 Intent 传递给 sendBroadcast() 或 sendOrderedBroadcast() ,可以将广播传递给其他应用。
Intent过滤器
Intent 过滤器是 manifests 里组件的子标签,一个控件可以声明一个或者多个Intent 过滤器,只要其中一个通过匹配,该组件就可以相应相应 Intent。下面是官网的一个例子:

<activity android:name="MainActivity">
    <!-- 应用的首页面,会显示在启动器中 -->
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity android:name="ShareActivity">
    <!-- 该活动可以处理 SEND这个 aciton,且处理数据类型为无格式文本 -->
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
     <!--需要响应隐式Intent的活动必须添加 android.intent.category.DEFAULT这个分类,因为starActivity()方法会默认为Intent添加-->
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
    <!-- 此为同一个 Activity 的第二个过滤器  该活动可以处理 "SEND""SEND_MULTIPLE"两种 aciton  处理数据类型为多媒体数据(包括图片、视频和全景照片) -->
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <action android:name="android.intent.action.SEND_MULTIPLE"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="application/vnd.google.panorama360+jpg"/>
        <data android:mimeType="image/*"/>
        <data android:mimeType="video/*"/>
    </intent-filter>
</activity>

使用注意事项:
1 、Intent 只能有1个 action,而 Intent 过滤器可有多个 action。
2、 需要响应隐式 Intent 的 Activity 的 Intent 过滤器中必须添加 android.intent.category.DEFAULT这个分类。
3 、data 在构造时传入的是 URI对象以及 mimeType 字符串,mimeType 的对应关系比较直观不详述,Uri 对象会被分为 4 个部分 (<协议>://<主机名>:<端口>/<路径>)。
4 、path 和 mimeType 允许使用*通配符,实现部分匹配。
5、 对于所有 Activity,必须在清单文件中声明 Intent 过滤器。但是,广播接收器的过滤器可以通过调用 registerReceiver() 动态注册。 且可以使用 unregisterReceiver() 注销该接收器。这样一来,应用便可仅在应用运行时的某一指定时间段内侦听特定的广播。
判断是否非空:
当隐式 Intent 发出而找不到匹配 Activity 时,调用将会失败,且应用会崩溃。要验证是否存在会接收 Intent 的 Activity ,可以对 Intent 对象调用resolveActivity()。如果结果为非空,则至少有一个应用能够处理该 Intent,且可以安全调用 startActivity()。 如果结果为空,则不应使用该 Intent,应停用发出该 Intent 的功能。

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
sendIntent.setType("text/plain");
// 判断是否存在能够匹配该 Intent 的 Activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
    startActivity(sendIntent);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值