336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

# Activity를 호출 하는 예제나 강좌를 찾아 봐도 언듯 임의의 다른 프로그램의 Activity를 호출하는 방법을 이해하기가 쉽지 않았다.

   Uri, Action, Category 강좌는 http://www.androidside.com/B46/1427 이곳을 보면 나와 있다.  

   But! Uri가 어떻고, Action이며, category까지 ... 대충 각각 내용을 알아 듣는다 하더라도,,,그래서

   그래서 호출은 어떻게 하라는 건데???? @_@

 

# 그래서 맨땅에서 해딩 하다가 이런걸 발견했다.

   Can I Use this Intent ? :  http://docs.androidside.com/docs/resources/articles/can-i-use-this-intent.html

   물론 내 관심사는 그 Intent를 쓸수 있나를 확인 하는게 중요한게 아니고 쓸수 있는 Intent를 어떻게 만드는가 이다.

   어찌 됐던..위 소스를 보다가 답(???) 을 알아 냈다. 소스상에서 Action name을 입력해서 인텐트의  생성여부를 확인해서 호출이

   가능한지 아닌지를 판단하고 있다.

   intent가 생성 된다면 startActivity 함수에 그 Intent를 넘겨주면 Activity가 호출 되는 것이 아닌가!!!!

 

# 호출 당할 프로그램으로 "Activity간 데이타 주고 받기" 에서 사용한 프로그램을 사용했는데 그 소스 그대로는 내가 알아낸 방법으로는

  호출이 안되어서 AndroidMenifest.XML을 수정했다.

 

- IntentTest2의 AndroidMenifest.Xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.edu.IntentTest" android:versionCode="1" android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".IntentTest" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="MyActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.Default" />
            </intent-filter>
          <intent-filter>
             <action android:name="com.edu.IntentTest.TIMER"/>          <-- Intent-filter  새로 추가함
          <category android:name="android.intent.category.DEFAULT"/>
         </intent-filter>
        </activity>
    </application>
</manifest>

# intent-filter를 새로 추가하면서, action name을 내가 TIMER라고 내맘대로 멋지게 지어줬다. ^^

Intent intent = new Intent(String ActionName);  넌 "com.edu.IntentTest.TIMER" 라고 부르면 실행 되려무나~ 

 

# intenttest2는 호출 될 프로그램 이고, intenttest4는 호출가능 여부를 판단하고 가능 할 경우 호출하는 프로그램 이다.

 위의 링크한 Can I Use This Intent 소스를 추가 해서 만들었다. 



#위의 EditText란에 ActionName을 입력하고 확인하기를 누르면 아래 호출 가능여부가 표시 되고 , 호출 가능시 호출하기 누르면 실행됨!!!

 

- IntentTest4.Java -

package org.Test.IntentTest4;

import! android.app.Activity;
import! android.content.Intent;
import! android.os.Bundle;
import! android.view.View;
import! android.widget.Button;
import! android.widget.EditText;
import! android.widget.TextView;

public class IntentTest4 extends Activity {


 private String action;
 private Button btCall;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        final EditText editAction = (EditText) findViewById(R.id.editAction);
        final Button btTest = (Button) findViewById(R.id.btCheck);
        btTest.setOnClickListener(new View.OnClickListener() {           
            @Override
            public void onClick(View arg0) {
             action = editAction.getText().toString();
             final  TextView txtAction = (TextView) findViewById(R.id.txtAction);
             txtAction.setText(action);
             CheckCallAvailable();
            }
        });
       
        btCall = (Button) findViewById(R.id.btCall);
        btCall.setOnClickListener(new View.OnClickListener() {           
            @Override
            public void onClick(View arg0) {
             CallIntent();
            }
        });
    }
   
    private void CallIntent() {
     final Intent intent = new Intent(action);
     startActivity(intent);     
    }
   
    private void CheckCallAvailable() {
     final boolean scanAvailable = CheckIntent.isIntentAvailable(this.getBaseContext(), action);
     final TextView txtRslt = (TextView) findViewById (R.id.txtResult);
     btCall.setEnabled(scanAvailable);
     if (scanAvailable) txtRslt.setText("호출 가능!!!");
     else txtRslt.setText("호출 불가!!!");          
    }
}

  

- CheckIntent.Java -

package org.Test.IntentTest4;
import! java.util.List;

import! android.content.Context;
import! android.content.Intent;
import! android.content.pm.PackageManager;
import! android.content.pm.ResolveInfo;

 

public class CheckIntent {

    public static boolean isIntentAvailable(Context context, String action) {
   //CanIUseThisIntent 소스에서 가져옴
     final PackageManager packageManager = context.getPackageManager();   
     final Intent intent = new Intent(action);   
     List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
       PackageManager.MATCH_DEFAULT_ONLY);   
     return (list.size() > 0);
    }       
}

- main.xml -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
<LinearLayout android:id="@+id/LinearLayout01"
    android:orientation="vertical"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">
<EditText android:text="com.edu.IntentTest.TIMER"
 android:id="@+id/editAction"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"></EditText>
<Button android:text="확인하기"
  android:id="@+id/btCheck"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"></Button>
</LinearLayout>
<TextView 
    android:text="--"
    android:id="@+id/txtAction"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"></TextView>
<LinearLayout android:id="@+id/LinearLayout02"
    android:orientation="horizontal"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">
<TextView 
    android:text="-결과-"
    android:id="@+id/txtResult"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"></TextView>
<Button android:text="호출하기"
  android:id="@+id/btCall"
  android:enabled = "false"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"></Button>
</LinearLayout>
</LinearLayout>


출처 : http://v.daum.net/info/10765005
블로그 이미지

뚱땡이 우주인

,