安卓开发学习笔记(四):Android Stuidio无法实现隐式Intent是为什么?
2018-10-27 22:43
721 查看
一.首先检查我们的代码:
FirstActivity.java(主活动程序当中的代码):
Button3监听器后面的代码就是我们隐式Intent的业务逻辑所在了,大家可以往下面看看,大概在代码的第57行。
1 package com.example.lenovo.activitytest; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.Toast; import android.content.Intent; public class FirstActivity extends AppCompatActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main,menu);//第一个参数表示我们通过哪一个资源来引用菜单当中的全部资源 // 第二个参数表示菜单被添加到哪一个对象当中 return true;//这句话表示我们创建的菜单是可以显示出来的,但是仅仅显示还是不够的,还需要真正地让菜单上的选项起作用。 } @Override public boolean onOptionsItemSelected(MenuItem item)//这里定义菜单为一个响应式事件 { switch (item.getItemId()) { case(R.id.add_item): Toast.makeText(this,"你选择了增加",Toast.LENGTH_SHORT).show(); break; case(R.id.remove_item): Toast.makeText(this,"你选择了减少",Toast.LENGTH_SHORT).show(); break; default://这个关键字是可以不要的 } return true;//将菜单当中的显示出来 } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_layout); Button button1=(Button)findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast toast=Toast.makeText(FirstActivity.this,null,Toast.LENGTH_SHORT); toast.setText("只有傻逼才会按这个按钮"); toast.show();//利用这种方法就可以去掉前面的APP名称了,而且这种创建对象的方法也更可以令人理解 } }); Button button2=(Button)findViewById(R.id.button_2); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(FirstActivity.this,"只有不学习的人才会按这个按钮", Toast.LENGTH_SHORT).show(); } }); Button button4=(Button)findViewById(R.id.button_4); button4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /*Intent intent=new Intent(FirstActivity.this,SecondActivity.class); startActivity(intent); 我们这里已经使用了显示intent,现在开始进行隐式intent的使用,首先应该在xml当中进申明 *///这就是所谓的显示intent了,相对于来说这已经是十分容易实现的了。 Intent intent=new Intent("com.example.lenovo.activitytest.ACTION_START"); startActivity(intent); } }); Button button3=(Button)findViewById(R.id.button_3); button3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(FirstActivity.this,SecondActivity.class); startActivity(intent); } }); } }
二.注册在主活动上的代码需要补上:
1 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.lenovo.activitytest"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".FirstActivity" android:label="这是一个让人感到好笑的APP"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SecondActivity" android:label="这是一个严肃的APP"> <intent-filter><!-- 这里是一个隐式的intent申明--> <action android:name="com.example.lenovo.activitytest.ACTION_START"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="com.example.lenovo.activitytest.MY_CATEGORY"/> </intent-filter> </activity> </application> </manifest>
从中我们可以看到我们注册在XML界面上,<intent-filter>后面的代码为<action android:name="com.example.lenovo.activitytest.ACTION_START"/>,action中间name的名称一定要注意。这个里面的名称是不能够乱写的,这里名称将会和刚刚前面主活动当中的代码相呼应:
1 Button button4=(Button)findViewById(R.id.button_4); button4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /*Intent intent=new Intent(FirstActivity.this,SecondActivity.class); startActivity(intent); 我们这里已经使用了显示intent,现在开始进行隐式intent的使用,首先应该在xml当中进申明 *///这就是所谓的显示intent了,相对于来说这已经是十分容易实现的了。 Intent intent=new Intent("com.example.lenovo.activitytest.ACTION_START"); startActivity(intent); } });
因此我们可以看到,里面的字符串均是com.example.lenovo.activitytest,不能够乱写。这行字符串是怎么得到的呢?我们可以在主活动当中的第一行代码当中可以找到其代码为:package com.example.lenovo.activitytest。这样的话,才可以进行正确地调用主活动当中的方法,实现隐式intent跳转。如果在xml当中仅仅写上:com.example.lenovo.activitytest.ACTION_START的话,这个活动在APP进行运行的时候就不会实现正常的跳转,从而销毁活动,造成失灵。这就是我们Android Stuidio无法实现隐式Intent的原因。
相关文章推荐
- 安卓开发学习笔记(三):Android Stuidio无法引用Intent来创建对象,出现cannot resolve xxx
- 隐式启动为什么要加android.intent.category.DEFAULT?
- 为什么隐式intent无法启动activity
- Android使用Intent隐式实现页面跳转
- android组件通讯 Intent Filter隐式实现Intent
- android组件通讯 Intent Filter隐式实现Intent
- Android 使用ContentProvider 实现多个activity灵活显示,实现Intent隐式传值.
- Android Intent.ACTION_CHOOSER 与 Intent.ACTION_PICK_ACTIVITY实现设置壁纸
- android隐式intent及启动方式
- android Intent (隐式意图和显示意图)
- android intent隐式调用之一个应用程序启动另一个应用程序
- AIR Native Extension:在Android的Flex应用中调用Android Intent实现分享功能
- android Intent 启动拨号 实现打电话
- Android之隐式意图(Intent)如何查找匹配的组件
- 关于Android隐式Intent
- android中画文字的换行 办法(对于遇到canvas.drawText(String s )无法实现换行问题的解决)
- 初学Android实现打电话的功能-使用Intent和AndroidManifset.xml中加入权限
- Android深入探究笔记之三 -- Intent (隐式意图和显示意图)
- android.intent.action.MEDIA_MOUNTED广播无法收到的问题
- android-基础知识:实现简单的拨打电话功能_intent_study