0

私はアンドロイドの初心者です。私はアンドロイドでアラームアプリケーションを開発しています。デバイスがオンのときに機能する次のコードを実行しましたが、デバイスを再起動すると機能しません。そのアラームを共有設定に保存し、そこから取得しました。デバイスを再起動すると、OnBootReceiverからアラームのスケジュールを変更します。Androidマニフェストへのアクセス許可についてはすでに説明しました。テストの目的で、ハードコードされた値を使用しています。次のコードを確認して、1日半から調査するのを手伝ってください。誰もが考えを持っています。ありがとう。

パブリッククラスFirstActivityはActivityを拡張し、OnClickListenerを実装します{

  int mHour = 14;
  int mMinute = 48;
  static String prefkey="SHARED_KEY";

public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   SharedPreferences preferences  =getSharedPreferences(prefkey,Context.MODE_WORLD_READABLE);


        SharedPreferences.Editor editor = preferences.edit();
        editor.putInt("min",mMinute);
        editor.putInt("hour",mHour);
        editor.commit();
   }
}

パブリッククラスOnBootRecieverはBroadcastReceiverを拡張します{

    int sethour,setmin;
@Override
public void onReceive(Context context, Intent intent) {

    Toast.makeText(context, "booting....", Toast.LENGTH_LONG).show();
    SharedPreferences preferences=context.getSharedPreferences(FirstActivity.prefkey,Context.MODE_PRIVATE);
    sethour=preferences.getInt("hour",14);
    setmin=preferences.getInt("min",48);
    Calendar cal=Calendar.getInstance();
    cal.add(Calendar.MINUTE,setmin);
    cal.add(Calendar.HOUR_OF_DAY,sethour);
    cal.add(Calendar.SECOND,0);


    AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent i=new Intent(context,RepeatingAlarm.class);

    PendingIntent sender1 = PendingIntent.getBroadcast(context,0, i,PendingIntent.FLAG_UPDATE_CURRENT);

    mgr.setRepeating(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),AlarmManager.INTERVAL_FIFTEEN_MINUTES,sender1);

}

}

パブリッククラスRepeatingAlarmはBroadcastReceiverを拡張します{

   static MediaPlayer mMediaPlayer ;

@Override
public void onReceive(Context context, Intent intent) {
    Toast.makeText(context, "Trigger the alarm", Toast.LENGTH_LONG).show();
    mMediaPlayer = new MediaPlayer();
   mMediaPlayer.create(getcontext,R.raw.warm).start();
   }

}

AndroidManifest.xml内->

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
 <receiver android:name="com.vidushi.alarmsystem.RepeatingAlarm"></receiver>
        <receiver android:name=".OnBootReciever" android:process=":remote">
            <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.HOME" />
            </intent-filter>
         </receiver>
4

2 に答える 2

1

Android が OnBootReceiver クラスを呼び出すと、アプリケーションからのコンテキストではなく、独自のコンテキストが渡される可能性があります。Androidには共有設定がないため、共有設定を見つけることができません。メソッドで取得するコンテキストではなく、独自のコンテキストを使用するようにしてくださいonReceiveApplication次のようにクラスを作成contextし、アプリケーションの開始時に初期化できます。

android.content.Context をインポートします。

public class Application extends android.app.Application {

    private static Context context;

    public void onCreate(){
        context=getApplicationContext();
    }

    public static Context getContext() {
        return context;
    }

}

また、AndroidManifest.xml のタグに次の属性を追加する必要があります。

android:name=".Application"

リンク

次に、Application共有設定を取得するために使用します。

Context context = Application.getContext();
SharedPreferences preferences=context.getSharedPreferences(FirstActivity.prefkey,Context.MODE_PRIVATE);
于 2011-11-09T12:23:53.933 に答える
0

アプリはSDカードにインストールされていますか?そうである場合、「ブート完了」通知を受信しません。

アプリのインストール場所を参照してください

于 2012-07-17T20:40:47.740 に答える