1

アラーム マネージャーとブロードキャスト レシーバーを使用してアプリケーションを作成し、メイン アクティビティからパブリック クラス MyScheduleReceiver に文字列を渡したい (アラーム マネージャーが内部にある) 後、パブリック クラス MyStartServiceReceiver に BroadcastReceiver を拡張してデータを静的関数に渡す....In主なアクティビティは、編集ボックスからこの変数を共有設定で保存します。しかし、受信機内で共有設定を使用することはできません。

 public class MyScheduleReceiver extends BroadcastReceiver {
 public void onReceive(Context context, Intent intent) {

  int theHour = intent.getIntExtra("AlarmHour", 0);  
  int theMinute= intent.getIntExtra("AlarmMin", 0); 

AlarmManager service = (AlarmManager) context
    .getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, MyStartServiceReceiver.class);
PendingIntent pending = PendingIntent.getBroadcast(context, 0, i,
    PendingIntent.FLAG_CANCEL_CURRENT);

i.putExtra("data","1");

Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());

cal.set(Calendar.HOUR_OF_DAY, theHour);  // set user selection
cal.set(Calendar.MINUTE, theMinute); 
cal.set(Calendar.SECOND, 0);

service.set(AlarmManager.RTC_WAKEUP,
    cal.getTimeInMillis(), pending);

}


public class MyStartServiceReceiver extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {

  Intent service = new Intent(context, AlarmService.class);

 context.startService(service);

 String result = intent.getStringExtra("data");

 String msg=result;
 try {

    ArduBtTimer.sendData(msg);
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
4

2 に答える 2

0

BroadCastReceiverを使用して保存したい情報を送信し、そこにSPで保存する必要があると思います。

受信者からアクティビティに情報を送信する例を次に示します。

  1. BroadcastReceiverデータを取得するアクティビティを拡張する内部クラスを作成します。

    private BroadcastReceiver ReceivefromService = new BroadcastReceiver(){
        @Override
        public void onReceive(Context context, Intent intent)
        {
            //get the data using the keys you entered at the service
            String IncomingSms=intent.getStringExtra("incomingSms");//
            String phoneNumber=intent.getStringExtra("incomingPhoneNumber");
    
        }
    };
    
  2. これを に追加onPause():

    @Override
    protected void onPause() {
        super.onPause();
        try {
            unregisterReceiver(ReceivefromService);
        } catch (IllegalArgumentException e) {
            if (e.getMessage().contains("Receiver not registered")) {
                Log.i("TAG","Tried to unregister the reciver when it's not registered");
            }
            else
            {
                throw e;
            }
        }
    }
    
  3. これを に追加onResume():

    protected void onResume() {
        super.onResume();
        filter.addAction("android.intent.action.SmsReceiver");
        registerReceiver(ReceivefromService, filter);
        //the first parameter is the name of the inner class we created.
    }
    
  4. 次のように、ブロードキャストを開始するレシーバー/サービス内にインテントを作成します。

    Intent i = new Intent("android.intent.action.SmsReceiver").putExtra("incomingSms", message);
    i.putExtra("incomingPhoneNumber", phoneNumber);
    context.sendBroadcast(i);
    

それがあなたを助けることを願っています...

于 2014-03-09T21:04:10.860 に答える
0

try this:

 where u want to set value:
 i.putExtra("data",yourstring); 
 and for recieve: 
 String value = intent.getStringExtra("data");
于 2013-01-30T12:14:26.340 に答える