안드로이드 개발 질문/답변
(글 수 45,052)
package com.ksh.SafeEarphone;import java.util.Timer;
import java.util.TimerTask;import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;public class service extends Service{
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onStart(Intent intent, int startId) {
Log.d("slog", "onStart()");
super.onStart(intent, startId); AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE);
Log.i("am.isWiredHeadsetOn()", am.isWiredHeadsetOn()+"");
AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
if(audioManager.isWiredHeadsetOn()==true){
Log.i("test", "wired set on");
Intent myIntent = new Intent(this,SafeEarphone.class);
this.startActivity(myIntent);
Toast.makeText(this,"Earphones are set on2",Toast.LENGTH_SHORT).show();
}
else{
Log.i("test", "ACTION_HEADSET_PLUG == 0");
Toast.makeText(this, "이어폰 연결이 되지 않았습니다람쥐.", Toast.LENGTH_SHORT)
.show();
}
}
}
서비스에서 이어폰 연결여부를 확인합니다. 연결되면 SafeEarphone.java 메인 액티티가 실행되게끔
이어폰이 연결되어있지않으면 Main.java 액티비티가 실행되게끔 했습니다.
아래는 Main.java 소스입니다.
package com.ksh.SafeEarphone;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Window;public class Main extends Activity { /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.start);
startService(new Intent("com.ksh.SafeEarphone"));
Handler handler = new Handler () {
@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub
super.handleMessage(msg);
finish();
}
};
handler.sendEmptyMessageDelayed(0, 2500);
// TODO Auto-generated method stub
}}
Manifest에는 아래와같이 작성했습니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ksh.SafeEarphone" android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon72" android:label="@string/app_name">
<service android:name="service">
<intent-filter>
<action android:name="com.ksh.SafeEarphone"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</service>
<activity android:name=".Main" android:label="@string/app_name" noHistory="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity><activity android:name="SafeEarphone"></activity> </application>
<uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INJECT_EVENTS"></uses-permission></manifest>
SafeEarphone.java 에는 건드리지않아 이상이없구요.
어플실행시 이어폰은 꽂지않은 상태에서는 잘되는데
이어폰이 연결된상태에서 실행하면 애플리케이션이 예상치않게 중단 되었습니다. 다시시도해주세요. 하면서 안되네요..
어떻게 해야 될까요??ㅠ_ㅠ 도와주세요~
에러로그입니다..
2012.07.17 09:12:40
main.java에 12번째줄
startService(new Intent("com.ksh.SafeEarphone"));
이건 제가 처음 보는 방식이긴한데요
에러로그를 보시면 인텐트를 시작할 수 없다고 나와있죠
패키지 명만 적어놓으셨는데, 그렇게 해도 되는지는 모르겠습니다.
이렇게 바꿔보세요
startService(new Intent(Main.this, service.class));
클래스명을 바꾸시고 대문자로 하시면 더 좋을것같네요
2012.07.17 11:40:43
<service android:name="service"> => <service android:name=".service">
내부에서만 쓰이는 서비스라면 구지 export안시키고 밥아저씨같이 사용하심이...
괜히 시스템에 서비스명을 등록시킬 필요는 없을듯 합니다.




에러 로그를 올려서 도움을 청해 보세요