Android入门之Intent

纸上得来终觉浅,绝知此事要躬行  --陆游       问渠那得清如许,为有源头活水来  --朱熹


Intent有意图、目的的含义,分为显式Intent和隐式Intent,是android应用中一个重要的桥梁。

Intent是Android程序中各组件进行交互的重要方式,不仅可以指明当前组件想要进行的活动,也可以在不同组件之间进行数据传递。它一般可以启动活动(Activity),服务(Service)以及广播(Broadcast)等。
一、显式Intent,启动Activity并传递数据。
(1)创建MainActivity以及布局文件 activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >
<Button
android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="button1"
        />
</LinearLayout>

 
 
public class MainActivity extends Activity {

    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO 自动生成的方法存根  Intent intent =new Intent(MainActivity.this,SecondActivity.class); //Intent初始方法
                Bundle bundle=new Bundle();
                bundle.putString("name", "tian"); //进行数据传递
                intent.putExtras(bundle);
                startActivity(intent); //跳转到SecondActivity
            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}


(2)创建SecondActivity以及second_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
<Button 
    android:id="@+id/button2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="button2"
    />
</LinearLayout>


public class SecondActivity extends Activity {

    @Override
    public void onCreate(Bundle savedinstance)
    {
        super.onCreate(savedinstance);
        setContentView(R.layout.second_activity);
        Intent intent=getIntent(); //获得跳转过来的Intent
        Bundle bundle=intent.getExtras();
        String name=bundle.getString("name"); //得到数据
        Log.v("info", name);//输出数据
    }

}




二、隐式Intent
相比于显式的Intent,隐式的Intent更为含蓄,它不明确指定要启动哪一个活动,而是通过在AndroidManifest.xml中通过配置一些更为抽象的action和category等信息,让系统通过这些信息来找到适合的活动来启动。
(1)新建ThridActivity,及thrid_acticvity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

<Button
android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="buntton3"
        />
</LinearLayout>

public class ThridActivity extends Activity{
    @Override
    public void onCreate(Bundle savedInstanceBundle)
    {
        super.onCreate(savedInstanceBundle);
        setContentView(R.layout.thrid_activity);
    }

}
在AndroidManifest.xml中进行如下配置。
 
<activity  android:name=".ThridActivity" >
<intent-filter>
<action android:name="com.example.THRID"/>
<category android:name="com.example.category.THRID"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
在MainActivity中添加如下代码
thridButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
        // TODO 自动生成的方法存根  Intent intent=new Intent("com.example.THRID");
        intent.addCategory("com.example.category.THRID");
        startActivity(intent);
        }
        });
同样可以完成MainActivity到ThridActivity的跳转


三、更多隐式Intent的使用

显示网页:
 
browseButton=(Button)findViewById(R.id.browsebutton);
        browseButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO 自动生成的方法存根  Intent intent=new Intent(Intent.ACTION_VIEW); //这是android系统内置的动作,同时android系统内置了很多类似的动作
        Uri uri=Uri.parse("http://www.baidu.com");
        intent.setData(uri);
        startActivity(intent);

        }
        });

单击browse按钮之后会跳转到浏览器

Android系统内置了很多系统的Action,可以直接进行调用。

1.浏览网页   
Uri uri = Uri.parse(" http://www.google.com");   
Intent it  = new Intent(Intent.ACTION_VIEW,uri);   
startActivity(it);   
  
2.显示地图   
Uri uri = Uri.parse("geo:38.899533,-77.036476");   
Intent it = new Intent(Intent.Action_VIEW,uri);   
startActivity(it);   
  
3.路径规划   
Uri uri = Uri.parse(" http://maps.google.com/maps?f=dsaddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");   
Intent it = new Intent(Intent.ACTION_VIEW,URI);   
startActivity(it);   
  
4.拨打电话   
Uri uri = Uri.parse("tel:xxxxxx");   
Intent it = new Intent(Intent.ACTION_DIAL, uri);     
startActivity(it);   
  
5.调用发短信的程序   
Intent it = new Intent(Intent.ACTION_VIEW);      
it.putExtra("sms_body", "The SMS text");      
it.setType("vnd.android-dir/mms-sms");      
startActivity(it);   
  
6.发送短信   
Uri uri = Uri.parse("smsto:0800000123");      
Intent it = new Intent(Intent.ACTION_SENDTO, uri);      
it.putExtra("sms_body", "The SMS text");      
startActivity(it);   
String body="this is sms demo";   
Intent mmsintent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("smsto", number, null));   
mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY, body);   
mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE, true);   
mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT, true);   
startActivity(mmsintent);   
  
7.发送彩信   
Uri uri = Uri.parse("content://media/external/images/media/23");      
Intent it = new Intent(Intent.ACTION_SEND);      
it.putExtra("sms_body", "some text");      
it.putExtra(Intent.EXTRA_STREAM, uri);      
it.setType("image/png");      
startActivity(it);   
StringBuilder sb = new StringBuilder();   
sb.append("file://");   
sb.append(fd.getAbsoluteFile());   
Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mmsto", number, null));   
// Below extra datas are all optional.   
intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_SUBJECT, subject);   
intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY, body);   
intent.putExtra(Messaging.KEY_ACTION_SENDTO_CONTENT_URI, sb.toString());   
intent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE, composeMode);   
intent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT, exitOnSent);   
startActivity(intent);   
  
8.发送Email   
Uri uri = Uri.parse("mailto: [email protected]");   
Intent it = new Intent(Intent.ACTION_SENDTO, uri);   
startActivity(it);   
Intent it = new Intent(Intent.ACTION_SEND);      
it.putExtra(Intent.EXTRA_EMAIL, " [email protected]");      
it.putExtra(Intent.EXTRA_TEXT, "The email body text");      
it.setType("text/plain");      
startActivity(Intent.createChooser(it, "Choose Email Client"));   
Intent it=new Intent(Intent.ACTION_SEND);        
String[] tos={" [email protected]"};        
String[] ccs={" [email protected]"};        
it.putExtra(Intent.EXTRA_EMAIL, tos);        
it.putExtra(Intent.EXTRA_CC, ccs);        
it.putExtra(Intent.EXTRA_TEXT, "The email body text");        
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");        
it.setType("message/rfc822");        
startActivity(Intent.createChooser(it, "Choose Email Client"));      
  
Intent it = new Intent(Intent.ACTION_SEND);      
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");      
it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");      
sendIntent.setType("audio/mp3");      
startActivity(Intent.createChooser(it, "Choose Email Client"));   
  
9.播放多媒体     
Intent it = new Intent(Intent.ACTION_VIEW);   
Uri uri = Uri.parse("file:///sdcard/song.mp3");   
it.setDataAndType(uri, "audio/mp3");   
startActivity(it);   
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");      
Intent it = new Intent(Intent.ACTION_VIEW, uri);      
startActivity(it);   
  
10.uninstall apk   
Uri uri = Uri.fromParts("package", strPackageName, null);      
Intent it = new Intent(Intent.ACTION_DELETE, uri);      
startActivity(it);   
  
11.install apk   
Uri installUri = Uri.fromParts("package", "xxx", null);   
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);   
  
12. 打开照相机   
    Intent i = new Intent(Intent.ACTION_CAMERA_BUTTON, null);   
    this.sendBroadcast(i);   
    long dateTaken = System.currentTimeMillis();   
    String name = createName(dateTaken) + ".jpg";   
    fileName = folder + name;   
    ContentValues values = new ContentValues();   
    values.put(Images.Media.TITLE, fileName);   
    values.put("_data", fileName);   
    values.put(Images.Media.PICASA_ID, fileName);   
    values.put(Images.Media.DISPLAY_NAME, fileName);   
    values.put(Images.Media.DESCRIPTION, fileName);   
    values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, fileName);   
    Uri photoUri = getContentResolver().insert(   
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);   
       
    Intent inttPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);   
    inttPhoto.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);   
    startActivityForResult(inttPhoto, 10);   
  
13.从gallery选取图片   
Intent i = new Intent();   
i.setType("image/*");   
i.setAction(Intent.ACTION_GET_CONTENT);   
startActivityForResult(i, 11);   
  
14. 打开录音机   
Intent mi = new Intent(Media.RECORD_SOUND_ACTION);   
startActivity(mi);   
  
15.显示应用详细列表         
Uri uri = Uri.parse("market://details?id=app_id");           
Intent it = new Intent(Intent.ACTION_VIEW, uri);           
startActivity(it);           
//where app_id is the application ID, find the ID            
//by clicking on your application on Market home            
//page, and notice the ID from the address bar        
  
刚才找app id未果,结果发现用package name也可以   
Uri uri = Uri.parse("market://details?id=<packagename>");   
这个简单多了   
  
16.寻找应用         
Uri uri = Uri.parse("market://search?q=pname:pkg_name");           
Intent it = new Intent(Intent.ACTION_VIEW, uri);           
startActivity(it);   
//where pkg_name is the full package path for an application         
  
17.打开联系人列表   
    <1>              
    Intent i = new Intent();   
    i.setAction(Intent.ACTION_GET_CONTENT);   
    i.setType("vnd.android.cursor.item/phone");   
    startActivityForResult(i, REQUEST_TEXT);   
  
    <2>   
    Uri uri = Uri.parse("content://contacts/people");   
    Intent it = new Intent(Intent.ACTION_PICK, uri);   
    startActivityForResult(it, REQUEST_TEXT);   
  
18. 打开另一程序   
Intent i = new Intent();   
ComponentName cn = new ComponentName("com.yellowbook.android2",   
        "com.yellowbook.android2.AndroidSearch");   
i.setComponent(cn);   
i.setAction("android.intent.action.MAIN");   
startActivityForResult(i, RESULT_OK);   
  
19.调用系统编辑添加联系人(高版本SDK有效):  
Intent it = newIntent(Intent.ACTION_INSERT_OR_EDIT);  
it.setType("vnd.android.cursor.item/contact");  
//it.setType(Contacts.CONTENT_ITEM_TYPE);  
it.putExtra("name","myName");  
it.putExtra(android.provider.Contacts.Intents.Insert.COMPANY,  "organization");  
it.putExtra(android.provider.Contacts.Intents.Insert.EMAIL,"email");  
it.putExtra(android.provider.Contacts.Intents.Insert.PHONE,"homePhone");  
it.putExtra(android.provider.Contacts.Intents.Insert.SECONDARY_PHONE,  
               "mobilePhone");  
it.putExtra(  android.provider.Contacts.Intents.Insert.TERTIARY_PHONE,  
               "workPhone");  
it.putExtra(android.provider.Contacts.Intents.Insert.JOB_TITLE,"title");  
startActivity(it);  
   
20.调用系统编辑添加联系人(全有效):  
Intent intent = newIntent(Intent.ACTION_INSERT_OR_EDIT);  
intent.setType(People.CONTENT_ITEM_TYPE);  
intent.putExtra(Contacts.Intents.Insert.NAME, "My Name");  
intent.putExtra(Contacts.Intents.Insert.PHONE, "+1234567890");  
intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE,Contacts.PhonesColumns.TYPE_MOBILE);  
intent.putExtra(Contacts.Intents.Insert.EMAIL, " [email protected]");  
intent.putExtra(Contacts.Intents.Insert.EMAIL_TYPE,                    Contacts.ContactMethodsColumns.TYPE_WORK);  
startActivity(intent);  

你可能感兴趣的:(android,intent)