安卓开发学习笔记(四):Android Stuidio无法实现隐式Intent是为什么?

简介: 一.首先检查我们的代码: FirstActivity.java(主活动程序当中的代码):Button3监听器后面的代码就是我们隐式Intent的业务逻辑所在了,大家可以往下面看看,大概在代码的第57行。

一.首先检查我们的代码:

FirstActivity.java(主活动程序当中的代码):
Button3监听器后面的代码就是我们隐式Intent的业务逻辑所在了,大家可以往下面看看,大概在代码的第57行。
 1 package com.example.lenovo.activitytest;
 2 
 3 import android.support.v7.app.AppCompatActivity;
 4 import android.os.Bundle;
 5 import android.view.Menu;
 6 import android.view.MenuItem;
 7 import android.view.View;
 8 import android.widget.Button;
 9 import android.widget.Toast;
10 import android.content.Intent;
11 
12 public class FirstActivity extends AppCompatActivity {
13     @Override
14     public boolean onCreateOptionsMenu(Menu menu) {
15        getMenuInflater().inflate(R.menu.main,menu);//第一个参数表示我们通过哪一个资源来引用菜单当中的全部资源
16         // 第二个参数表示菜单被添加到哪一个对象当中
17        return true;//这句话表示我们创建的菜单是可以显示出来的,但是仅仅显示还是不够的,还需要真正地让菜单上的选项起作用。
18     }
19     @Override
20     public boolean onOptionsItemSelected(MenuItem item)//这里定义菜单为一个响应式事件
21     {
22         switch (item.getItemId())
23         {
24             case(R.id.add_item):
25 
26                 Toast.makeText(this,"你选择了增加",Toast.LENGTH_SHORT).show();
27                 break;
28             case(R.id.remove_item):
29                 Toast.makeText(this,"你选择了减少",Toast.LENGTH_SHORT).show();
30                 break;
31                 default://这个关键字是可以不要的
32         }
33         return true;//将菜单当中的显示出来
34     }
35     @Override
36     protected void onCreate(Bundle savedInstanceState) {
37         super.onCreate(savedInstanceState);
38         setContentView(R.layout.first_layout);
39         Button button1=(Button)findViewById(R.id.button_1);
40         button1.setOnClickListener(new View.OnClickListener() {
41             @Override
42             public void onClick(View v) {
43                 Toast toast=Toast.makeText(FirstActivity.this,null,Toast.LENGTH_SHORT);
44                 toast.setText("只有傻逼才会按这个按钮");
45                 toast.show();//利用这种方法就可以去掉前面的APP名称了,而且这种创建对象的方法也更可以令人理解
46             }
47         });
48         Button button2=(Button)findViewById(R.id.button_2);
49         button2.setOnClickListener(new View.OnClickListener() {
50             @Override
51             public void onClick(View v) {
52                 Toast.makeText(FirstActivity.this,"只有不学习的人才会按这个按钮",
53                         Toast.LENGTH_SHORT).show();
54             }
55         });
56         Button button4=(Button)findViewById(R.id.button_4);
57         button4.setOnClickListener(new View.OnClickListener() {
58             @Override
59             public void onClick(View v) {
60                /*Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
61                startActivity(intent);
62                我们这里已经使用了显示intent,现在开始进行隐式intent的使用,首先应该在xml当中进申明
63                *///这就是所谓的显示intent了,相对于来说这已经是十分容易实现的了。
64                 Intent intent=new Intent("com.example.lenovo.activitytest.ACTION_START");
65                 startActivity(intent);
66             }
67         });
68         Button button3=(Button)findViewById(R.id.button_3);
69         button3.setOnClickListener(new View.OnClickListener() {
70             @Override
71             public void onClick(View v) {
72                Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
73                startActivity(intent);
74             }
75         });
76 
77 
78 
79     }
80 
81 }

二.注册在主活动上的代码需要补上:

 

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.lenovo.activitytest">
 4 
 5     <application
 6         android:allowBackup="true"
 7         android:icon="@mipmap/ic_launcher"
 8         android:label="@string/app_name"
 9         android:roundIcon="@mipmap/ic_launcher_round"
10         android:supportsRtl="true"
11         android:theme="@style/AppTheme">
12         <activity
13             android:name=".FirstActivity"
14             android:label="这是一个让人感到好笑的APP">
15             <intent-filter>
16                 <action android:name="android.intent.action.MAIN" />
17 
18                 <category android:name="android.intent.category.LAUNCHER" />
19             </intent-filter>
20         </activity>
21         <activity android:name=".SecondActivity"
22             android:label="这是一个严肃的APP">
23             <intent-filter><!-- 这里是一个隐式的intent申明-->
24                 <action android:name="com.example.lenovo.activitytest.ACTION_START"/>
25                     <category android:name="android.intent.category.DEFAULT"/>
26                 <category android:name="com.example.lenovo.activitytest.MY_CATEGORY"/>
27             </intent-filter>
28         </activity>
29     </application>
30 
31 </manifest>

 

从中我们可以看到我们注册在XML界面上,<intent-filter>后面的代码为<action android:name="com.example.lenovo.activitytest.ACTION_START"/>,action中间name的名称一定要注意。这个里面的名称是不能够乱写的,这里名称将会和刚刚前面主活动当中的代码相呼应:

 1         Button button4=(Button)findViewById(R.id.button_4);
 2         button4.setOnClickListener(new View.OnClickListener() {
 3             @Override
 4             public void onClick(View v) {
 5                /*Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
 6                startActivity(intent);
 7                我们这里已经使用了显示intent,现在开始进行隐式intent的使用,首先应该在xml当中进申明
 8                *///这就是所谓的显示intent了,相对于来说这已经是十分容易实现的了。
 9                 Intent intent=new Intent("com.example.lenovo.activitytest.ACTION_START");
10                 startActivity(intent);
11             }
12         });

因此我们可以看到,里面的字符串均是com.example.lenovo.activitytest,不能够乱写。这行字符串是怎么得到的呢?我们可以在主活动当中的第一行代码当中可以找到其代码为:package com.example.lenovo.activitytest。这样的话,才可以进行正确地调用主活动当中的方法,实现隐式intent跳转。如果在xml当中仅仅写上:com.example.lenovo.activitytest.ACTION_START的话,这个活动在APP进行运行的时候就不会实现正常的跳转,从而销毁活动,造成失灵。这就是我们Android Stuidio无法实现隐式Intent的原因。

 

目录
相关文章
|
4天前
|
Android开发 开发者 Kotlin
探索安卓开发中的新特性
【9月更文挑战第14天】本文将引导你深入理解安卓开发领域的一些最新特性,并为你提供实用的代码示例。无论你是初学者还是经验丰富的开发者,这篇文章都会给你带来新的启示和灵感。让我们一起探索吧!
|
1天前
|
Java Linux Android开发
深入理解Android开发:从基础到高级
【9月更文挑战第17天】本文将深入探讨Android开发的各个方面,包括应用开发、操作系统等。我们将通过代码示例来展示如何创建一个简单的Android应用,并解释其背后的原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
8天前
|
IDE 开发工具 Android开发
安卓与iOS开发对比:平台选择对项目成功的影响
【9月更文挑战第10天】在移动应用开发的世界中,选择正确的平台是至关重要的。本文将深入探讨安卓和iOS这两大主要移动操作系统的开发环境,通过比较它们的市场份额、开发工具、编程语言和用户群体等方面,为开发者提供一个清晰的指南。我们将分析这两个平台的优势和劣势,并讨论如何根据项目需求和目标受众来做出最佳选择。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更好地理解每个平台的特性,并指导你做出明智的决策。
|
4天前
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
11 3
|
6天前
|
API Android开发 iOS开发
安卓与iOS开发中的线程管理对比
【9月更文挑战第12天】在移动应用的世界中,安卓和iOS平台各自拥有庞大的用户群体。开发者们在这两个平台上构建应用时,线程管理是他们必须面对的关键挑战之一。本文将深入探讨两大平台在线程管理方面的异同,通过直观的代码示例,揭示它们各自的设计理念和实现方式,帮助读者更好地理解如何在安卓与iOS开发中高效地处理多线程任务。
|
7天前
|
搜索推荐 Android开发 UED
安卓开发中的自定义视图:打造个性化用户界面
【9月更文挑战第11天】在安卓应用开发领域,自定义视图是实现独特用户体验的基石。本文将引导你通过一个简单的自定义视图示例,探索如何从零开始创建并应用自定义组件,以增强你的应用界面。我们将一起学习如何扩展View类,重写onDraw方法,处理触摸事件,并最终在我们的安卓项目中使用这个自定义视图。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供清晰的步骤和实用的技巧,帮助你提升用户界面设计的能力。
|
8天前
|
Linux Android开发 iOS开发
探索Android与iOS开发:平台之战还是互补共生?
在移动应用开发的浩瀚宇宙中,Android和iOS这两大星系始终吸引着无数开发者的目光。它们各自拥有独特的引力场,引领着技术潮流的方向。本文将穿梭于这两个平台的星际空间,揭示它们背后的力量对比,以及如何在这两者之间找到平衡点,共同推动移动应用开发的进步。
18 1
|
8天前
|
开发框架 Android开发 iOS开发
探索安卓与iOS开发的差异:构建未来应用的指南
在移动应用开发的广阔天地中,安卓与iOS两大平台各占半壁江山。本文将深入浅出地对比这两大操作系统的开发环境、工具和用户体验设计,揭示它们在编程语言、开发工具以及市场定位上的根本差异。我们将从开发者的视角出发,逐步剖析如何根据项目需求和目标受众选择适合的平台,同时探讨跨平台开发框架的利与弊,为那些立志于打造下一个热门应用的开发者提供一份实用的指南。
23 5
|
8天前
|
开发工具 Android开发 iOS开发
安卓与iOS开发:平台选择的艺术与科学
在移动应用开发的广阔天地中,安卓与iOS两大平台如同东西方哲学的碰撞,既有共通之处又各具特色。本文将深入探讨这两个平台的设计理念、开发工具和市场定位,旨在为开发者提供一份简明扼要的指南,帮助他们在这场技术与商业的博弈中找到自己的道路。通过比较分析,我们将揭示每个平台的优势与局限,以及它们如何影响应用的性能、用户体验和市场接受度。无论你是初涉江湖的新手,还是经验丰富的老手,这篇文章都将为你的选择提供新的视角和思考。
19 5
|
9天前
|
安全 Android开发 开发者
探索安卓开发的未来:Kotlin的崛起与Flutter的挑战
在移动开发的广阔天地中,安卓平台始终占据着举足轻重的地位。随着技术的不断进步和开发者需求的多样化,Kotlin和Flutter成为了改变游戏规则的新玩家。本文将深入探讨Kotlin如何以其现代化的特性赢得开发者的青睐,以及Flutter凭借跨平台的能力如何挑战传统的安卓开发模式。通过实际案例分析,我们将揭示这两种技术如何塑造未来的安卓应用开发。
30 6