Android:给应用界面提供快捷方式


  • 目录
    Android:给应用界面提供快捷方式前言一、代码二、遇到的问题和解决方法1.不知道包名2.运行时显示错误三、效果



前言

在平时使用微信,支付宝等APP的时候,我们长按应用图标,其会弹出扫一扫等应用界面快捷方式,如图所示。

Android快捷菜单 安卓应用快捷菜单_开发语言

        最近观看动脑学院的安卓教程,里面正好有这一功能的实现教程。但按照里面敲出来会发生许多报错,在这里将代码和我遇到的错误以及解决方法po出来供大家借鉴。


 

提示:以下是本篇文章正文内容,下面案例可供参考

一、代码

        首先,在res文件夹中新建一个目录“xml”,新建一个xml文件叫做shortcuts.xml,如下图所示。

Android快捷菜单 安卓应用快捷菜单_开发语言_02

         其代码如下:

<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcut
        android:shortcutId="first"
        android:enabled="true"
        android:icon="@mipmap/ic_launcher"
        android:shortcutShortLabel="@string/first_short"
        android:shortcutLongLabel="@string/first_long">

       <intent
           android:action="android.intent.action.VIEW"
           android:targetPackage="com.example.hotel"
           android:targetClass="com.example.hotel.ui.MainActivity"/>
        <categories android:name="android.shortcut.conversation"/>
    </shortcut>

</shortcuts>

         需要注意的是,shortcutShortLabel和shortcutLongLabel不能直接在双引号内写对应的内容,而应该在values目录下的string.xml配置相关内容,然后回到该文件引用。

        string.xml代码如下:

<resources>
    <string name="app_name">crab</string>
    <string name="first_short">first</string>
    <string name="first_long">首页</string>
</resources>

        然后在AndroidMainifest.xml中进行配置,我以主页面作为启动页面,在其中加入<meta-data>标签,如下图所示。

Android快捷菜单 安卓应用快捷菜单_android studio_03

        这样的话流程就走完了。 


 


二、遇到的问题和解决方法

1.不知道包名

        在视频中,老师在AndroidManifest.xml找到包名,但是我点开我的文件,里面没有显示包名,我找了好久也不知道对应的包名:

Android快捷菜单 安卓应用快捷菜单_Android快捷菜单_04

         于是在shortcuts.xml中寻找targetPackage不知道该写啥,所以需要找一种方式得到包名。

        我通过下面方法获得了包名:

        修改MainActivity.java文件:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String packageName = getPackageName();
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.setPackage(packageName);
        TextView tv_receive = findViewById(R.id.tv_receive);
        String desc = String.format("包名为:%s",packageName);
        tv_receive.setText(desc);
    }
}

         主页面的layout代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="这里是主页面!!!还未开发完成!!!!!!!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tv_receive"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />

</androidx.constraintlayout.widget.ConstraintLayout>

        运行之后,得到包名,如图所示:

Android快捷菜单 安卓应用快捷菜单_java_05

         于是将 包名加入配置文件、以及targetPackage便解决该问题。

2.运行时显示错误

ERROR:D:\AndroidProject\xxx\app\src\main\res\xml\shortcuts.xml:7: AAPT: error: attribute android:shortcutID not found.

        刚开始显示这个错误,经过我一番细致检查,我发现是打错字了……shortcutId的最后一个字母打成了大写……

        不过修改完之后还是报错,我查阅了资料:这个错误通常是由于在 Android 版本较早的设备上使用了android:shortcutId,而它只在 Android 7.1(API 级别 25)及以上版本中可用,所以需要解决该错误。

        于是我在我项目的build.gradle文件查找我的minSdk版本,发现刚好24……于是进行修改

Android快捷菜单 安卓应用快捷菜单_开发语言_06

        修改后右上角会弹出信息,点击Sync Now,不要点击ingnore these changes。

        修改之后就可以成功运行了。

三、效果

        如图所示:

Android快捷菜单 安卓应用快捷菜单_android studio_07

Android快捷菜单 安卓应用快捷菜单_Android快捷菜单_08