gpt4 book ai didi

android - 将字符串从服务发送到 Activity

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:53:02 25 4
gpt4 key购买 nike

我正在尝试通过广播将字符串从服务发送到我的主要 Activity 。我在一些论坛上看到有两种使用广播的方法。一种是在 list 中注册 Activity ,第二种方法是在本地 Activity 上进行。我想知道如何使用第二种方式。我尝试过这样做,但不幸的是我没有成功。

请告诉我我做错了什么。

服务代码

   public class MyGcmListenerService extends GcmListenerService {

private static final String TAG = "MyGcmListenerService";

// [START receive_message]
@Override
public void onMessageReceived(String from, Bundle data) {
String typemessage = data.getString("typemessage"); // typeMessage = 0 or 1 = lock or unlock
String datamessage = data.getString("datamessage"); // dataMessage = time and message that says lock or unlock

Log.d(TAG, "TypeMessage: " + typemessage);
Log.d(TAG,"DataMesaage:"+ datamessage);

Intent in = new Intent();
in.putExtra("TYPE",typemessage);
in.setAction("NOW");
sendBroadcast(in);
...

主要 Activity 代码

    public class MainActivity extends Activity implements SensorEventListener, Listen {

private BroadcastReceiver statusReceiver;
private IntentFilter mIntent;


Sensor accelerometer;
SensorManager sm;
TextView acceleration;
SendValues sv;
int counter3 = 0;
int counter5 = 0;

private static final String TAG = "MainActivity";

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

mIntent = new IntentFilter("NOW");

// this.registerReceiver(,new IntentFilter("status"));

sm = (SensorManager) getSystemService(SENSOR_SERVICE);
sm.registerListener(this,accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
accelerometer = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

acceleration = (TextView) findViewById(R.id.sensorTxt);

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

String type = intent.getStringExtra("message"); //get the type of message from MyGcmListenerService 1 - lock or 0 -Unlock
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
accelerometer = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
Log.d(TAG, "Status: " + type);
if (type == "1") // 1 == lock
{
Toast.makeText(getApplication(), "Lock", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplication(), "UNLOCK", Toast.LENGTH_LONG).show();
}
}

};
}

@Override
protected void onResume()
{
super.onResume();
registerReceiver(statusReceiver,mIntent);
}

@Override
protected void onPause() {
if(mIntent != null) {
unregisterReceiver(statusReceiver);
mIntent = null;
}
super.onPause();
}


----------

嗯,我不知道我做错了什么,还有一个问题,我需要在

In set Action("我可以在这里放任何我想要的字符串/ Action ?这意味着什么 Action ?我只想将字符串发送到主要 Activity ,我应该做什么 Action "?)

最佳答案

您可以使用 LocalBroadcastManager 来实现您想要的。就像在您的 service 中一样,当您要发送数据时调用此方法。

private static void sendMessageToActivity(String msg) {
Intent intent = new Intent("intentKey");
// You can also include some extra data.
intent.putExtra("key", msg);
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}

在你的 Activity 中在 onCreate()

中注册一个 Receiver
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mMessageReceiver, new IntentFilter("intentKey"));

onCreate() 这段代码中。

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
String message = intent.getStringExtra("key");
tvStatus.setText(message);
// Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
};

关于android - 将字符串从服务发送到 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37322312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com