我有两个活动的应用程序。第一个(蓝牙活动)是搜索蓝牙设备并与它们连接(工作正常)。第二个(控制活动)有一个控制按钮。每个按钮都假设通过蓝牙发送命令。
问题是: 1.当我使用Intent时,它会从" Control Activity"中传递日期。到"蓝牙活动",还要将视图更改为"蓝牙活动"我不想要的。
2.如果我使用" intent.putExtra"我在"控制活动"中有多个命令?它需要插入一个KEY。如何找到发送的密钥。
"控制活动"
Intent intent = new Intent(this,Bluetooth.class);
intent.putExtra("blue", "b");
startActivity(intent);
"蓝牙活动"
getIntent().getExtras().getString("blue")
答案 0 :(得分:1)
您可以在Bluetooth Activity类中定义常量,例如:
public static final String EXTRA_KEY_BLUE = "blue";
然后你有一个这个常量的定义,所以你可以在每个类中使用它,例如:
Intent intent = new Intent(this,Bluetooth.class);
intent.putExtra(Bluetooth.EXTRA_KEY_BLUE, "b");
startActivity(intent);
在蓝牙活动中,您可以检查捆绑包是否包含特定密钥。
答案 1 :(得分:1)
您也可以使用共享偏好设置
答案 2 :(得分:1)
创建意图传递类名称或intnet操作名称
Intent intent = new Intent(this,Bluetooth.class);
// put key/value data
intent.putExtra("message", "Hello From Your Class");
// or you can add data to a bundle
Bundle extras = new Bundle();
extras.putString("status", "Data Received!");
// add bundle to intent
intent.putExtras(extras);
// start the activity
startActivity(intent);
我们可以使用getIntent()
获取对发送的意图的引用来访问发送的数据;
在这里,我们可以提取已发送的消息getIntent().getStringExtra(“message”)
此外,我们可以访问附加的包getIntent().getExtras()
,然后我们可以从包中提取数据。
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
// 1. get passed intent
Intent intent = getIntent();
// 2. get message value from intent
String message = intent.getStringExtra("message");
// 3. show message on textView
((TextView)findViewById(R.id.tvMessage)).setText(message);
// 4. get bundle from intent
Bundle bundle = intent.getExtras();
// 5. get status value from bundle
String status = bundle.getString("status");
// 6. show status on Toast
Toast toast = Toast.makeText(this, status, Toast.LENGTH_LONG);
toast.show();
}
如果您要保存的关键值集合相对较少,则应使用SharedPreferences Demo。
答案 3 :(得分:0)
但也将视图更改为“我不想要的蓝牙活动”
如果你不想开始一项活动,你将不得不做其他的事情,比如使用一个非活动的类,它可能适合像蓝牙这样的东西有一个单身:
public enum Bluetooth {
INSTANCE;
//methods
}
除此之外,我在开始时传递给活动的一般方式是我倾向于定义一个私有常量,并将两个代码段放在同一个类中:
public class Bluetooth extends Activity {
private static final String EXTRA_KEY_BLUE = "blue";
public static Intent createIntent(String blue) {
Intent intent = new Intent(this,Bluetooth.class);
intent.putExtra(EXTRA_KEY_BLUE, "b");
return intent;
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(...)
String blue = getIntent().getExtras().getString(EXTRA_KEY_BLUE);
}
}
控制活动(没有提及键,因此它是强类型的):
Intent intent = Bluetooth.createIntent("b");
startActivity(intent);
答案 4 :(得分:0)
:
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
Set<String> keys = bundle.keySet();
Iterator<String> it = keys.iterator();
while (it.hasNext()) {
String key = it.next(); //your key
bundle.get(key); //your value
}
}
答案 5 :(得分:0)
Intent用于从Activity更改为other。如果您只想使用蓝牙的某些功能,最好在BluetoothActivity中定义一个方法并直接从ControlActivity中调用它,但不要将视图更改为BluetoothActivity。
在“BluetoothActivity”中
public static void action(String str) {
//Some actions
}
在“ControlActivity”中
BluetoothActivity.action("blue")
另一种方法是,如果你不想使用静态方法,你也可以从ControlActivity保留BluetoohActivity的引用,然后定义以前的方法而不是静态方法,并从这个引用中调用它。