Intent的应用
Intent作为四大组件之一,必定功能强大。
Intent初步功能是进行页面跳转,也就是一个Activity跳另一个Activity,这一节内容我们在美团的美食列表中也提过。
具体代码就这几行
Intent intent = new Intent(context,
touch_success.class);
Bundle bundle = new Bundle();
bundle.putString("id", id);
intent.putExtras(bundle);
context.startActivity(intent);
其中的context代表当前页面,通常默认MainActivity.class,大概意思可以理解为我要从当前页面跳到另一个页面去啦,这里呢touch_success是早就定义好的Activity组件,它负责显示另一个页面显示。
在全部设置好以后,记住在AndroidManifest里面定义好你要跳转的页面
两个页面之间也同样可以传递消息,看我们呢主程序
protected void onCreate(Bundle savedInstanceState)
里面的Bundle以前一直不知道是有什么用,现在知道是两个Activity页面的消息传参
<activity
android:name="com.example.touchtotouch.touch_success"
android:label="@string/app_name" />
然后你的当前页面默认显示是
<activity
android:name="com.example.touchtotouch.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
这几句匪夷所思的语句其实是定义了Activity入口,也就是说刚刚启动程序时首先显示的页面。
现在我们来完成一个较为复杂实例:手机拨号器的制作:
首先主布局文件:
一个编辑框实现输入
一个拨号按键组合
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="82dp"
android:ems="10"
android:background="#ffffffff"
android:textSize="40sp"
android:textStyle="bold"
android:textColor="#ff333333" >
<requestFocus />
</EditText>
<TableLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="0.70" >
<TableRow
android:id="@+id/TableRow04"
android:layout_width="110dp"
android:layout_height="wrap_content" >
<ImageButton
android:id="@+id/ImageButton01"
android:layout_width="100dp"
android:layout_height="70dp"
android:onClick="digital_click"
android:src="@drawable/a1"
android:background="@drawable/button_selector"
android:tag="1" />
<ImageButton
android:id="@+id/ImageButton02"
android:layout_width="100dp"
android:layout_height="70dp"
android:src="@drawable/a2"
android:onClick="digital_click"
android:background="@drawable/button_selector"
android:tag="2"/>
<ImageButton
android:id="@+id/ImageButton03"
android:layout_width="100dp"
android:layout_height="70dp"
android:src="@drawable/a3"
android:onClick="digital_click"
android:background="@drawable/button_selector"
android:tag="3" />
</TableRow>
<TableRow
android:id="@+id/TableRow03"
android:layout_width="110dp"
android:layout_height="wrap_content" >
<ImageButton
android:id="@+id/ImageButton4"
android:layout_width="100dp"
android:layout_height="70dp"
android:onClick="digital_click"
android:src="@drawable/a4"
android:background="@drawable/button_selector"
android:tag="4" />
<ImageButton
android:id="@+id/ImageButton5"
android:layout_width="100dp"
android:layout_height="70dp"
android:onClick="digital_click"
android:src="@drawable/a5"
android:background="@drawable/button_selector"
android:tag="5" />
<ImageButton
android:id="@+id/ImageButton06"
android:layout_width="100dp"
android:layout_height="70dp"
android:onClick="digital_click"
android:src="@drawable/a6"
android:background="@drawable/button_selector"
android:tag="6"/>
</TableRow>
<TableRow
android:id="@+id/TableRow02"
android:layout_width="110dp"
android:layout_height="wrap_content" >
<ImageButton
android:id="@+id/ImageButton10"
android:layout_width="100dp"
android:layout_height="70dp"
android:background="@drawable/button_selector"
android:onClick="digital_click"
android:src="@drawable/a7"
android:tag="7"/>
<ImageButton
android:id="@+id/ImageButton11"
android:layout_width="100dp"
android:layout_height="70dp"
android:background="@drawable/button_selector"
android:onClick="digital_click"
android:src="@drawable/a8"
android:tag="8" />
<ImageButton
android:id="@+id/ImageButton12"
android:layout_width="100dp"
android:layout_height="70dp"
android:background="@drawable/button_selector"
android:onClick="digital_click"
android:src="@drawable/a9"
android:tag="9" />
</TableRow>
<TableRow
android:id="@+id/TableRow01"
android:layout_width="110dp"
android:layout_height="wrap_content" >
<ImageButton
android:id="@+id/ImageButton10"
android:layout_width="100dp"
android:layout_height="70dp"
android:background="@drawable/button_selector"
android:onClick="digital_click"
android:src="@drawable/a10"
android:tag="*"/>
<ImageButton
android:id="@+id/ImageButton11"
android:layout_width="100dp"
android:layout_height="70dp"
android:background="@drawable/button_selector"
android:onClick="digital_click"
android:src="@drawable/a11"
android:tag="0"/>
<ImageButton
android:id="@+id/ImageButton12"
android:layout_width="100dp"
android:layout_height="70dp"
android:background="@drawable/button_selector"
android:onClick="digital_click"
android:src="@drawable/a12"
android:tag="#" />
</TableRow>
</TableLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageButton
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.23"
android:onClick="addContact"
android:background="@drawable/b1" />
<ImageButton
android:id="@+id/dialer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1.17"
android:onClick="dial"
android:background="@drawable/b2"
/>
<ImageButton
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="delete"
android:background="@drawable/b3" />
</LinearLayout>
</LinearLayout>
大概布局成这样的效果就好:
接下来我们处理按键显示事项
Activity代码:
public class MainActivity extends Activity {
EditText textResult;//显示框
StringBuffer currentNum = new StringBuffer();//用于接受输入
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textResult=(EditText)findViewById(R.id.editText1);
}
接下来就是每一个数字按键绑定的方法处理,每按一个键,就记录下tag,标签,然后添加到StringBuffer里面
public void digital_click(View view){
ImageButton btnDigital=(ImageButton) view;
String text=btnDigital.getTag().toString();
currentNum.append(text);
display();
}
显示到编辑框上:
public void display(){
textResult.setText(currentNum.toString());
}
删除功能:
public void delete(View view){
if(currentNum.length()>=1){
currentNum.delete(currentNum.length()-1, currentNum.length());
}
if(currentNum.length()==0){
Toast toast=Toast.makeText(this,"请输入号码",100);
toast.show();
display();
}
textResult.setText(currentNum);
}
接下来重头戏:
拨号键绑定方法:
public void dial(View view) {
EditText text=(EditText)findViewById(R.id.editText1);
String number=text.getText().toString();
if(currentNum.length()==0){
Toast toast=Toast.makeText(this,"请输入号码",100);
toast.show();
display();
}
else{
Intent intent = new Intent();
intent.setAction(intent.ACTION_CALL);//设置事件跳转到系统默认的拨号页面
intent.setData(Uri.parse("tel:"+number));//传送数据
startActivity(intent);}//方法内部会自动为Intent添加类别: android.intent.category.DEFAULT
}
这样,基本大功告成了,接下来就是添加权限问题,心急的同学一定不要忘记这个步骤,一旦忘记,就会出现页面闪退哦
<uses-permission
android:name="android.permission.CALL_PHONE"/>
添加打电话权限
效果如图:
到了这里我们已经实现了打电话的功能,但是别忘了,还有一个添加联系人的功能我们还没实现,异曲同工
public void addContact(View view){
Intent it = new Intent(Intent.ACTION_INSERT,Uri.withAppendedPath(Uri.parse("content://com.android.contacts"),"contacts" ));
it.setType("vnd.android.cursor.dir/person");
String number = textResult.getText().toString();
it.putExtra(android.provider.ContactsContract.Intents.Insert.SECONDARY_PHONE,number);
startActivity(it);
}
完成图如下:
Intent的种类,Action之类的你是否开始疑惑了,其中Intent传递的数据一共有7种,这些我们会在下节课一一学习到,我们目标是做出手机出厂时的所有默认程序,完成了这些,你就是一个具备一定Android系统搭建的工程师了,跟着小编一起学习吧,安卓永无止境,你爱的,终究也会爱上你,纵然因它受挫无数,假若无挫,就怕错过。