# 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
'ⓐndroid > reference' 카테고리의 다른 글
Beginning Android Game Programming (0) | 2011.03.03 |
---|---|
Android TabHost Tutorial – Part 2 (0) | 2011.01.22 |
Android TabHost Tutorial – Part 1 (0) | 2011.01.22 |
[커니님강좌] 내가 누군지 말해줘! - 인텐트 필터 (Intent Filter) (0) | 2011.01.22 |
unlocking-android (0) | 2011.01.21 |