2012년 6월 21일 목요일

부팅 후 동영상 재생 시키기


android에서 부팅 후 바로 동영상을 재생 시켜 보겠습니다.

BOOT_COMPLETED로 googling 하면 관련 내용을 많이 찾을 수 있습니다.
하지만 고생했던 이유가 Activity가 없이 처리하려고 하니 잘 되지 않았는데 찾았습니다.

아래 코드처럼 Activity가 없으면 receiver에 추가해 줘야 합니다.

<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
그렇지 않으면 application 자체가 등록되지 않아서 BOOT_COMPLETED를 받을 수 없습니다.


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hardkernel.odroid"
    android:versionCode="1"
    android:versionName="1.0"
    android:installLocation="internalOnly">

    <uses-sdk android:minSdkVersion="10" />
    <uses-permission   android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >       
        <receiver
            android:name="com.hardkernel.odroid.BootReceiver" >
            <intent-filter>
            <action      android:name="android.intent.action.BOOT_COMPLETED"/>                       <action android:name="android.intent.action.WALLPAPER_CHANGED"/>                   <action android:name="android.intent.action.MAIN" />                  <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>
        </receiver>
    </application>

</manifest>

그리고 매번 부팅하여 동작하는지 확인하기 힘들어서 아래 코드를 추가하여 배경화면을 바꿔도 동일하게 BootReceiver class의 onReceive()이 호출 되는 걸 확인 할 수 있습니다.
<action android:name="android.intent.action.WALLPAPER_CHANGED"/>

그리고 이제 동영상을 재생 시켜 보는 코드 입니다.

public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Intent tostart = new Intent(Intent.ACTION_VIEW);
File wonder_girls = new File("/sdcard/Wonder.mp4");
tostart.setDataAndType(Uri.fromFile(wonder_girls), "video/*");
tostart.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(tostart);
}
}

부팅 후 바로 Wonder.mp4란 동영상이 플레이 됩니다.
물론 배경화면을 바꿔도 동일하게 반응합니다.