2013-08-05 3 views
0

Мне нужно установить AlaramManager, если пользователь выбрал что-то из настроек. но я к сожалению, остановил ошибку, где, по-вашему, моя проблема? благодаряAlarmManager не запускается после завершения загрузки

Приемник:

public class StartMyServiceAtBootReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { 
      SharedPreferences prefs = PreferenceManager 
        .getDefaultSharedPreferences(context); 
      if (prefs.getString("autoSend", null) != null) { 
       if (prefs.getString("autoSend", "").equals("true")) { 
        AlarmManager am = (AlarmManager) context 
          .getSystemService(Context.ALARM_SERVICE); 
        Intent i = new Intent(context, AutoSender.class); 
        PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
        am.setRepeating(AlarmManager.RTC_WAKEUP, 
          System.currentTimeMillis(), 1000 * 10, pi); 
       } 
      } 
     } 
    } 
} 

Намерение:

@SuppressLint("Wakelock") 
public class AutoSender extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent arg1) { 

     PowerManager pm = (PowerManager) context 
       .getSystemService(Context.POWER_SERVICE); 
     PowerManager.WakeLock wl = pm.newWakeLock(
       PowerManager.PARTIAL_WAKE_LOCK, ""); 
     wl.acquire(); 

     Toast.makeText(context, "Test" , Toast.LENGTH_LONG) 
       .show(); 

     wl.release(); 
    } 

} 

манифеста:

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="com.android.alarm.permission.SET_ALARM" /> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
------------------ 
<receiver android:name="AutoSender" > 
     </receiver> 
     <receiver 
      android:name=".StartMyServiceAtBootReceiver" 
      android:enabled="true" 
      android:exported="true" 
      android:permission="android.permission.RECEIVE_BOOT_COMPLETED" > 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 

Edit:

и вот Исключение:

08-07 11:21:46.825: E/AndroidRuntime(668): FATAL EXCEPTION: main 
08-07 11:21:46.825: E/AndroidRuntime(668): java.lang.RuntimeException: Unable to start receiver com.aps.safirsms.StartMyServiceAtBootReceiver: java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String 
08-07 11:21:46.825: E/AndroidRuntime(668): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2383) 
08-07 11:21:46.825: E/AndroidRuntime(668): at android.app.ActivityThread.access$1500(ActivityThread.java:141) 
08-07 11:21:46.825: E/AndroidRuntime(668): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1310) 
08-07 11:21:46.825: E/AndroidRuntime(668): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-07 11:21:46.825: E/AndroidRuntime(668): at android.os.Looper.loop(Looper.java:137) 
08-07 11:21:46.825: E/AndroidRuntime(668): at android.app.ActivityThread.main(ActivityThread.java:5041) 
08-07 11:21:46.825: E/AndroidRuntime(668): at java.lang.reflect.Method.invokeNative(Native Method) 
08-07 11:21:46.825: E/AndroidRuntime(668): at java.lang.reflect.Method.invoke(Method.java:511) 
08-07 11:21:46.825: E/AndroidRuntime(668): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
08-07 11:21:46.825: E/AndroidRuntime(668): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
08-07 11:21:46.825: E/AndroidRuntime(668): at dalvik.system.NativeStart.main(Native Method) 
08-07 11:21:46.825: E/AndroidRuntime(668): Caused by: java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String 
08-07 11:21:46.825: E/AndroidRuntime(668): at android.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:224) 
08-07 11:21:46.825: E/AndroidRuntime(668): at com.aps.safirsms.StartMyServiceAtBootReceiver.onReceive(StartMyServiceAtBootReceiver.java:18) 
08-07 11:21:46.825: E/AndroidRuntime(668): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2376) 
08-07 11:21:46.825: E/AndroidRuntime(668): ... 10 more 

ответ

0

Используйте LogCat для проверки трассировки стека Java, связанной с вашей «остановленной ошибкой».

В этом случае проблема в том, что у вас есть android:permission="android.permission.RECEIVE_BOOT_COMPLETED", что неверно. Это требует, чтобы тот, кто отправляет, имеет это разрешение, что не обязательно верно.

+0

Я не имел этого в во-первых, но получил ошибку и увидел ее в каком-то учебнике, поэтому я положил ее – ePezhman

+0

, и вещь эмулятора никогда не выключается, когда я пытаюсь отключить ее, диалог загрузки продолжается вечно, и ничего не происходит. – ePezhman

+0

@ePezhman: Вы завершаете эмулятор, закрывая его окно, используя средства, которые предоставляет ваша ОС для разработки (например, нажав кнопку X в верхнем правом или верхнем левом углу). Затем вы можете запустить новый эмулятор. Сначала установите приложение на эмулятор, прежде чем завершать его, чтобы убедиться, что он работает правильно при следующем запуске. – CommonsWare

0

одна вещь, которую я замечаю, это то, что вы забыли точку в android:name="AutoSender", так что это должно быть android:name=".AutoSender".

Кроме того, когда ваш BroadcastReceiver не в главном корпусе (не знаю, если это в вашем случае), вы должны поставить имя пакета перед ним, как этот android:name="my.package.name.AutoSender"

+0

Точка не требуется. – CommonsWare

Смежные вопросы