Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从广播接收器更新用户界面_Android_Broadcastreceiver - Fatal编程技术网

Android 从广播接收器更新用户界面

Android 从广播接收器更新用户界面,android,broadcastreceiver,Android,Broadcastreceiver,我有一个main活动,我想在每2分钟调用AlarmManager后更新UI。。请帮我怎么做 这是我的主要活动 public class MainActivity extends AppCompatActivity { private Toolbar toolbar; GPSTracker gps; TextView lat1, long1; Button exit, refresh; private PendingIntent pendingIntent; private static M

我有一个main活动,我想在每2分钟调用AlarmManager后更新UI。。请帮我怎么做

这是我的主要活动

   public class MainActivity extends AppCompatActivity {
private Toolbar toolbar;
GPSTracker gps;
TextView lat1, long1;
Button exit, refresh;
private PendingIntent pendingIntent;
private static MainActivity mInst;
double newLat, newLong;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    toolbar = (Toolbar) findViewById(R.id.app_bar);
    toolbar.setTitle("PWD_GPSFinder");
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    lat1 = (TextView) findViewById(R.id.latitude);
    long1 = (TextView) findViewById(R.id.longitude);
    exit = (Button) findViewById(R.id.button);
    exit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });
    refresh = (Button) findViewById(R.id.buttonRefresh);

    Intent alarmIntent = new Intent(MainActivity.this, BroadcastReceiver.class);
    pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, alarmIntent, 0);
    startAlarm();


    refresh.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            gps = new GPSTracker(MainActivity.this);

            // check if GPS enable
            if(gps.canGetLocation()){

                double latitude = gps.getLatitude();
                double longitude = gps.getLongitude();
                lat1.setText(""+latitude);
                long1.setText(""+longitude);

            }else{
                gps.showSettingsAlert();
            }
        }
    });

    gps = new GPSTracker(MainActivity.this);

    // check if GPS enabled
    if(gps.canGetLocation()){

        double latitude = gps.getLatitude();
        double longitude = gps.getLongitude();
        lat1.setText(""+latitude);
        long1.setText(""+longitude);

    }else{

        gps.showSettingsAlert();
    }

}


public void startAlarm(){
    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    /* Repeating on every 20 minutes interval */
    manager.setRepeating(AlarmManager.RTC_WAKEUP, 0,
            10 * 60 * 20, pendingIntent);
     Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}



@Override
protected void onResume() {

    super.onResume();
    // Other onResume() code here
    this.registerReceiver(mMessageReceiver, new IntentFilter("some_unique_name"));
}

@Override
protected void onPause() {
    super.onPause();
    this.unregisterReceiver(mMessageReceiver);
    // Other onPause() code here

}
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        // Extract data included in the Intent
        String message = intent.getStringExtra("lat");
        String msg2 = intent.getStringExtra("long");
        updateYourActivity(context);
        lat1.setText(""+message);
        long1.setText(""+msg2);
        //update the TextView
        Toast.makeText(context, "Alarm Settttttttt", Toast.LENGTH_SHORT).show();
    }
};

private void updateYourActivity(Context context) {

    Intent intent = new Intent("some_unique_name");

    // put whatever data you want to send, if any
    // intent.putExtra("message", message);

    // send broadcast
    Toast.makeText(context, "Alarm Setdfdgdfgdfgtt", Toast.LENGTH_SHORT).show();
    newLat = gps.getLatitude();
    newLong = gps.getLongitude();
    intent.putExtra("lat", newLat);
    intent.putExtra("long", newLong);

    context.sendBroadcast(intent);


}

}
和AlarmReceiver类

 public class AlarmReceiver extends BroadcastReceiver {
GPSTracker gps;
String strDateTime;
String strDate;
FileWriter writer;
public static String username1;
File gpxfile;
File gpxfile1;
double latitude;
double longitude;

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

    gps = new GPSTracker(context);

    // check if GPS enabled
    if(gps.canGetLocation()){

        double latitude = gps.getLatitude();
        double longitude = gps.getLongitude();
       // lat1.setText(""+latitude);
        //long1.setText(""+longitude);


    }else{
        // can't get location
        // GPS or Network is not enabled
        // Ask user to enable GPS/network in settings
        gps.showSettingsAlert();
    }
}

如何在此处设置TextView的值?请帮助我。

从BroadcastReceiver更新活动的一种方法是在MainActivity中创建BroadcastReceiver:

  private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
     @Override
     public void onReceive(Context context, Intent intent) {

    // Extract data included in the Intent
    // String message = intent.getStringExtra("message");
    //update the TextView
  }
};
在onResume中重新设置此广播接收器:

  this.registerReceiver(mMessageReceiver, new IntentFilter("some_unique_name"));
和注销暂停:

  this.unregisterReceiver(mMessageReceiver);
在AlarmReceiver中,只需使用:

private void updateYourActivity(Context context) {

  Intent intent = new Intent("some_unique_name");

  // put whatever data you want to send, if any
  // intent.putExtra("message", message);

  // send broadcast
  context.sendBroadcast(intent);
}

谢谢,我想每隔2分钟给这个广播接收器打一次电话,所以我正在使用AlarmManager。。。那么它会工作吗?我想会的,试着测试一下。一个更简单的方法可能是将
AlarmReceiver
放在
MainActivity
内部。这是一种不好的做法@udidan吗?+1对于回答@Udi Idan,Pri-alarmManager应该可以工作,但请确保您使用的是wakelock,因为如果您的手机处于休眠/睡眠模式,它将无法工作。@udidan结果是,在闹钟运行时调用了“onPause()”。这导致我的接收人被注销。有一次我把那部分评论出来,它就像一个符咒。您的回复和对原始OP的评论是一个很大的帮助。一吨泰铢。