반응형

인텐트(Intent)를 이용하여 안드로이드 시스템 액티비티들(스마트폰 개발회사가 미리 설치해 놓은 어플들)을 호출하는 예제입니다.


많은 시스템액티비티들 중에서 주로 많이 이용되고 있는 sms 문자보내기전화걸기이메일보내기 등의 어플들을 실행시켜보는 예제 소스입니다. 




메인화면                                        Dial Activity(전화번호 입력 액티비티)          Call Activity(전화걸기 액티비티)

    





SMS Activity(sms문자보내기 액티비티)      Web Page Activity(웹브라우져 액티비티)

   


 

Layout 파일

 activity_main.xml

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    

    <Button android:id="@+id/btn_dial"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="Start Dial Activity"

        android:onClick="mOnClick"/>

    

    <Button android:id="@+id/btn_call"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="Start Call Activity"

        android:onClick="mOnClick"/>

    

    <Button android:id="@+id/btn_sms"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="Start SMS Activity"

        android:onClick="mOnClick"/>

    

    <Button android:id="@+id/btn_webpage"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="Start Web Page Activity"

        android:onClick="mOnClick"/>

    

    <Button android:id="@+id/btn_email"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="Start E-Mail Activity"

        android:onClick="mOnClick"/>   


</LinearLayout>




소스파일

 

 MainActivity.java

 public class MainActivity extends Activity {


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

    //Button 클릭시에 자동으로 호출되는 callback Method...

    public void mOnClick(View v){

    

     Intent i; //시스템액티비티를 부를 Intent 참조변수

     Uri uri;  //시스템 액티비티의 세부 종류를 구분하는 Data는 Uri객체로 제공. 이를 위한 참조변수

    

     switch( v.getId() ){

    

     case R.id.btn_dial://전화번호 Dial 입력 액티비티 

    

     uri= Uri.parse("tel:01012345678"); //전화와 관련된 Data는 'Tel:'으로 시작. 이후는 전화번호

     i= new Intent(Intent.ACTION_DIAL,uri); //시스템 액티비티인 Dial Activity의 action값

     startActivity(i);//액티비티 실행   

    

     break;

    

     case R.id.btn_call://전화걸기 화면 액티비티

    

     uri= Uri.parse("tel:01012345678"); //전화와 관련된 Data는 'Tel:'으로 시작. 이후는 전화번호

     i= new Intent(Intent.ACTION_CALL,uri); //시스템 액티비티인 Dial Activity의 action값

     startActivity(i);//액티비티 실행  

     //전화걸기 액티비티는 전화요금과 관련된 것이기에 반드시 퍼미션(permission)을 받아야 합니다.

     //메니페스트 파일에 <uses-permission android:name="android.permission.CALL_PHONE"/> 추가.

    

     break;

     case R.id.btn_sms://문자보내기 액티비티

    

     uri= Uri.parse("smsto:01012345678"); //sms 문자와 관련된 Data는 'smsto:'로 시작. 이후는 문자를 받는 사람의 전화번호

     i= new Intent(Intent.ACTION_SENDTO,uri); //시스템 액티비티인 SMS문자보내기 Activity의 action값

     i.putExtra("sms_body", "Hello...");  //보낼 문자내용을 추가로 전송, key값은 반드시 'sms_body'

     startActivity(i);//액티비티 실행   

    

     break;

    

     case R.id.btn_webpage://웹브라우저 실행

    

     uri= Uri.parse("http://www.naver.com"); //웹페이지와 관련된 Data는 'http:'으로 시작. 이후는 사이트의 URL

     i= new Intent(Intent.ACTION_VIEW, uri); //시스템 액티비티인 Dial Activity의 action값

     startActivity(i);//액티비티 실행  

     //웹페이지 액티비티는 데이터요금과 관련된 것이기에 퍼미션(permission)을 받도록 합니다.

     //메니페스트 파일에 <uses-permission android:name="android.permission.INTERNET"/> 추가.

    

     break;


     case R.id.btn_email://이메일 보내기

    

     uri= Uri.parse("mailto:abcd@naver.com"); //이메일과 관련된 Data는 'mailto:'으로 시작. 이후는 이메일 주소

     i= new Intent(Intent.ACTION_SENDTO, uri); //시스템 액티비티인 Dial Activity의 action값

     startActivity(i);//액티비티 실행  

     //GenyMotion 무료버전에서는 실행오류. 실제 디바이스에서는 동작됩니다.

    

     break;   

    

     }

    

    }

}

 



 전화걸기와 네트워크를 사용하기 위해서는 사용 권한(uses-permission)이 필요합니다.

여러분 프로젝트의 메니페스트 파일에 퍼미션을 추가합니다.


 AndroidManifest.xml

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.kitesoft.systemintent"

    android:versionCode="1"

    android:versionName="1.0" >


    <uses-sdk

        android:minSdkVersion="14"

        android:targetSdkVersion="16" />

    

    <!-- 전화걸기 Call 액티비티 실행 퍼미션 -->

    <uses-permission android:name="android.permission.CALL_PHONE"/>

    

    <!-- 네트워크 사용 액티비티들에 대한 퍼미션 -->

    <uses-permission android:name="android.permission.INTERNET"/>


    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name=".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>

    </application>


</manifest>


 



기타 시스템 액티비티들


// 구글맵 띄우기

Uri uri = Uri.parse("geo:38.899533,-77.036476");

Intent it = new Intent(Intent.Action_VIEW,uri);

startActivity(it);

 

 

// 구글 길찾기 띄우기

Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=출발지주소&daddr=도착지주소&hl=ko");

Intent it = new Intent(Intent.ACTION_VIEW,URI);

startActivity(it);  

 

// SMS/MMS 발송

Intent it = new Intent(Intent.ACTION_VIEW);   

it.putExtra("sms_body", "The SMS text");   

it.setType("vnd.android-dir/mms-sms");   

startActivity(it); 

 

// MMS 발송

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);

 

 

// 이메일 발송 

Intent it = new Intent(Intent.ACTION_SEND);   

it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");   

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 = {"me@abc.com"};     

String[] ccs = {"you@abc.com"};     

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"));  

 

 

// extra 추가하기

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"));

 

 

// 미디어파일 플레이 하기

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); 

 

 

// 설치 어플 제거

Uri uri = Uri.fromParts("package", strPackageName, null);   

Intent it = new Intent(Intent.ACTION_DELETE, uri);   

startActivity(it);

 

 

// APK파일을 통해 제거하기

Uri uninstallUri = Uri.fromParts("package", "xxx", null);

returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri);

 

 

// APK파일 설치

Uri installUri = Uri.fromParts("package", "xxx", null);

returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);

 

 

// 음악 파일 재생

Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3");

returnIt = new Intent(Intent.ACTION_VIEW, playUri);

 

 

// 첨부파일을 추가하여 메일 보내기

Intent it = new Intent(Intent.ACTION_SEND);  

it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");  

it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/eoe.mp3");  

sendIntent.setType("audio/mp3");  

startActivity(Intent.createChooser(it, "Choose Email Client"));

 

 

// 마켓에서 어플리케이션 검색

Uri uri = Uri.parse("market://search?q=pname:pkg_name");  

Intent it = new Intent(Intent.ACTION_VIEW, uri);  

startActivity(it);  

// 패키지명은 어플리케이션의 전체 패키지명을 입력해야 합니다.

 

 

// 마켓 어플리케이션 상세 화면

Uri uri = Uri.parse("market://details?id=어플리케이션아이디");  

Intent it = new Intent(Intent.ACTION_VIEW, uri);  

startActivity(it);

// 아이디의 경우 마켓 퍼블리싱사이트의 어플을 선택후에 URL을 확인해보면 알 수 있습니다.

 

 

// 구글 검색

Intent intent = new Intent();

intent.setAction(Intent.ACTION_WEB_SEARCH);

intent.putExtra(SearchManager.QUERY,"searchString")

startActivity(intent);



[출처. 인터넷 검색(어딘지 기억이 안나네요. 문제되면 댓글달아 주세요~)]


반응형

+ Recent posts