2012-08-31 4 views
1

루프에서 단일 비디오를 재생하기위한 작은 응용 프로그램을 작성했습니다. 전원이 연결될 때 장치가 작동하여이 비디오가 재생되고 활동이 다시 닫힙니다. 이 후에도 배터리를 소모하지 않으려면 화면을 꺼야합니다. 나는 이것이 실제 장치에서 테스트 할 때, 그것은 활동이 여전히 실행되고 있는지, 때마다 말을전원 연결 해제 활동 닫기

package org.adem.receiver; 

import android.app.Activity; 
import android.app.ActivityManager; 
import android.app.KeyguardManager; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.PowerManager; 
import android.util.Log; 
import org.adem.activities.AdvertiserActivity; 
import org.adem.global.GlobalVariables; 

public class AppReceiver extends BroadcastReceiver { 

    private static final String TAG = AppReceiver.class.getSimpleName(); 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (Intent.ACTION_POWER_CONNECTED.equals(intent.getAction())) { 
      Log.d(TAG, "##Receiver triggered with " + intent.getAction()); 
      if (!checkForRunningActivity(context)) { 
       initStart(context); 
       Intent advertiserIntent = new Intent(context, AdvertiserActivity.class); 
       advertiserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       Log.d(TAG, "##Activity started" + advertiserIntent.getComponent().getShortClassName()); 
       context.startActivity(advertiserIntent); 
      } else { 
       Log.d(TAG, "##" + intent.getAction() + " received but ignored. Activity still running."); 
      } 
     } else if (Intent.ACTION_POWER_DISCONNECTED.equals(intent.getAction())) { 
      Log.d(TAG, "##Receiver triggered with " + intent.getAction()); 
      stopAllAndTurnOff(context); 

      Log.d(TAG, "##" + intent.getAction() + " received but ignored. Activity is not running."); 
     } 

    } 

    private void initStart(Context context) { 
     getWakeLock(context).acquire(); 
     GlobalVariables.DEVICE_READY = true; 
     getKeyGuardLock(context).disableKeyguard(); 
     Log.d(TAG, "##Wake Lock acquired"); 
    } 

    private void stopAllAndTurnOff(Context context) { 
     GlobalVariables.DEVICE_READY = false; 

     if (getWakeLock(context).isHeld()) { 
      getWakeLock(context).release(); 
      Log.d(TAG, "##Wake Lock released"); 
     } 
    } 

    private KeyguardManager.KeyguardLock getKeyGuardLock(Context context) { 
     if (GlobalVariables.getLock() == null) { 
      KeyguardManager.KeyguardLock lock; 
      KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Activity.KEYGUARD_SERVICE); 
      lock = keyguardManager.newKeyguardLock(Context.KEYGUARD_SERVICE); 
      GlobalVariables.setLock(lock); 
      Log.d(TAG, "##New KeyGuard initialized"); 
     } 
     return GlobalVariables.getLock(); 
    } 

    private PowerManager.WakeLock getWakeLock(Context context) { 
     if (GlobalVariables.getWl() == null) { 
      PowerManager.WakeLock wl; 
      PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
      wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG); 
      GlobalVariables.setWl(wl); 
      Log.d(TAG, "##New Wake Lock initialized"); 
     } 
     return GlobalVariables.getWl(); 
    } 

    private boolean checkForRunningActivity(Context context) { 
     ActivityManager manager = (ActivityManager) context.getSystemService(Activity.ACTIVITY_SERVICE); 
     for (ActivityManager.RunningTaskInfo task : manager.getRunningTasks(Integer.MAX_VALUE)) { 
      Log.d(TAG, task.baseActivity.getClassName()); 
      if (task.baseActivity.getClassName().equals("org.adem.activities.AdvertiserActivity") 
        || task.baseActivity.getClassName().equals("org.adem.activities.VideoViewActivity")) { 
       return true; 
      } 
     } 
     return false; 
    } 
} 

: 같은

실제 코드가 보인다. 하지만 왜?

감사

아뎀

답변

3

당신은 배터리 변경을 수신 할 방송 수신기를 추가 할 수 있습니다. 수신기가 연결 상태를 확인받은 후

가져 오기는 Intent.ACTION_BATTERY_CHANGED

Intent batteryIntent = context.getApplicationContext().registerReceiver(null, 
       new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 

에 대한 응답합니다.

은/충전 전원 사용 :

안드로이드 USB 연결

public static boolean isConnected(Context context) { 
    Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
    int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
    return plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB; 
} 

매니페스트 파일에 권한을 추가

android.permission.DEVICE_POWER 
0

난 당신이 매니페스트에 넣고 먼저 생각합니다. 그 시작 방송 후 android.permission.DEVICE_POWER

가 활동을 시작 receiver.then. 희망이 있습니다.