2014-04-06 3 views
0

나는 내 모든 수신 브로드 캐스트를 수신하는 데 문제가있는 것 같습니다. 내 코드가 문제인지 또는 Android Manifest의 문제인지 확실하지 않습니다. APK에의 활동이 적어도 한 번 시작되었습니다 때까지 브로드 캐스트 수신기가 수신되지 않음 브로드 캐스트

public class AlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i("BROADCAST_RECEIVED", intent.getDataString()); 
     PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
     PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP, ""); 
     wakeLock.acquire(); 
     wakeLock.release(); 
     context.startActivity(intent); 
    } 

} 

public void setDayOfWeekAlarm(DayOfWeek day){ 
    long alarmInMili = 0; 
    Intent intent = new Intent(context,AlarmScreenActivity.class); 
    alarmInMili = System.currentTimeMillis() + 1000*10; 
    Log.i("REGISTER ALARM", String.valueOf(alarmInMili)); 
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); 
    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,SystemClock.elapsedRealtime() + 
      10 * 1000,pi); 
} 

는 AndroidManifest를

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.brianlindsey.alarm" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="18" 
     android:targetSdkVersion="18" /> 

    <uses-permission android:name="android.permission.WAKE_LOCK" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <receiver 
      android:name="com.brianlindsey.AlarmReceiver" 
      android:enabled="true" > 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" > 
       </action> 
      </intent-filter> 
     </receiver> 

    </application> 

</manifest> 

답변

0

BOOT_COMPLETED 수신기는 브로드 캐스트를받을 수 없습니다. 그 이상한 규칙은 사람들이 실수로 앱을 다운로드하지 못하게하고 부팅시 실행되도록합니다.

+1

"실수로 앱을 다운로드하는 것"이 ​​"드라이브 바이 악성 코드 예방"이므로 그리 중요하지 않습니다. Play 스토어에 웹 사이트가 생기면 사용자는 기기에 대한 승인없이 기기에 앱을 설치하지 않아도 해킹 된 Google 자격증 명 중 하나입니다. – CommonsWare

+0

이것은 ANdroid의 결함처럼 들리지만 사용자가 직접 조치하지 않고 앱을 설치할 수있는 방법이 있습니다. 아직이 앱을 설치할 수 있기 때문에 결함을 수정하는 이상한 방법 인 것 같습니다. (사용자가 언젠가 아이콘을보고 "이게 뭐야?") 결국 앱이 설치됩니다. –

+1

"사용자가 직접 조치를 취하지 않고도 앱을 설치할 수있는 방법이 있습니다."- 실제로는 아닙니다. 다시 말하지만 해킹 된 Google 자격 증명 문제입니다. Google은 사용자가 해킹 된 자격 증명을 사용하는 사람과 사용자를 알릴 방법이 없으므로 사용자 입장에서 앱을 설치했습니다. – CommonsWare

1

가브의 대답 외에도 setDayOfWeekAlarm()에 사용중인 IntentAlarmScreenActivity을 가리 킵니다. 귀하의 BroadcastReceiver이 아니며 매니페스트에 등록 된 다른 구성 요소도 아닙니다.

관련 문제