android - 更新当前使用的应用程序

标签 android user-interface alarmmanager

我目前正在试用 AlarmManger,我已经设法让它在后台运行,而且我还可以 toast ,但我还没有弄清楚我应该如何在我的 UI 中编辑一些东西?

例子: 我有我的 MainActivity,我在 BroadcastReceiver 中的代码每分钟被调用一次,并且知道我想对 UI 进行一些更改,例如在文本中写入“AlarmManger 已触发 x 次”(X 将是一个计数器)

正确知道我的问题如何让我的闹钟每隔 10 秒响一次,而不是在 TIME_KICK 上响起,因为它已在接收器中注册。 希望你能理解!

谁能帮我解决我的情况?

我的主要 Activity

       package..
       imports[]


    public class MainActivity extends ActionBarActivity {


    private PendingIntent pendingIntent;
    BroadcastReceiver broadcastReceiver;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AlarmReceiver lAlarmReceiver = new AlarmReceiver(this);

        Intent alarmIntent = new Intent(MainActivity.this,AlarmReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0,alarmIntent,0);
        findViewById(R.id.btnStartCounting).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                start();
            }
        });



    }

    public void start(){
        AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        int interval = 6;
        manager.setInexactRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),interval,pendingIntent);


    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @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
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

我的报警器:

public class AlarmReceiver extends BroadcastReceiver{

    Context mContext;
    public AlarmReceiver(Context mContext){
        this.mContext=mContext;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        ActivityManager am = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am.getRunningAppProcesses();
    }
}

最佳答案

您可以使用 SharedPreferences 来执行此操作。

在您的广播接收器中,增加您的偏好:

@Override
public void onReceive(Context context, Intent intent) {
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = sharedPreferences.edit();

    int count = sharedPreferences.getInt("count", 0) + 1;

    editor.putInt("count", count);
    editor.commit();
}

在您的 Activity 中,设置您的 TextView onResume() 并注册一个 OnPreferenceChangeListener 以更改它 onSharedPreferenceChange():

public class MainActivity extends ActionBarActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
    SharedPreferences mSharedPreferences;
    TextView mCount;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        mCount = (TextView) findViewById(R.id.count);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mSharedPreferences.registerOnSharedPreferenceChangeListener(this);
        mCount.setText(Integer.toString(mSharedPreferences.getInt("count", 0)));
    }

    @Override
    protected void onPause() {
        super.onPause();
        mSharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if(key.equals("count")){
            mCount.setText(Integer.toString(mSharedPreferences.getInt("count", 0)));
        }
    }
}

关于android - 更新当前使用的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28888007/

相关文章:

java - 从 AlarmManger 启动的服务获取额外内容时的默认值

android - 为什么Android中UI操作必须在主线程进行

javascript - 加载页面时隐藏 jQuery 移动页脚

android - BadParcelableException ClassNotFoundException CoordinatorLayout$SavedState

Android:将pdf转换为图像

android - 如何在访问产品页面时提示用户下载应用程序?

用于图像编辑的 Java 书,例如亮度/对比度等(新手友好)

Android-具有不同时间的多个警报在错误的时间触发

java - 从表单调用另一个类后返回表单

java - AlarmManager 在两个特定时间