相同的自定义意图如何以显式和隐式的形式显示?通过" custom"我的意思是它不是ACTION_VIEW
或类似的东西。它用于在同一个应用程序中从另一个(activB
)打开一个活动(例如称为activA
)并将一些结果(几个boolean
vars)返回到第一个活动(activA
)。一个人如何能够实现这一点?
答案 0 :(得分:3)
定义一个整数常量,例如:
private static final int REQUEST_CODE = 1;
在Activity类中创建一个新的Intent:
Intent intent = new Intent(this, DestinationActivity.class);
startActivityForResult(intent, REQUEST_CODE);
在此Activity类中覆盖以下方法:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
// do something
}
}
在目标Activity类DestinationActivity中,您必须创建一个新的Intent来保存数据:
Intent data = new Intent();
data.putExtra("boolean1", true);
data.putExtra("boolean2", false);
要将数据传递回源Activity,您必须调用以下方法:
setResult(REQUEST_CODE, data); // will call onActivityResult() method
如果您想通过手机中的其他应用发送文字,可以使用显式意图或 ShareCompat 类(由v4支持库提供)。 ShareCompat示例:
Intent shareIntent = ShareCompat.IntentBuilder.from(this)
.setType("text/plain")
.setSubject("ShareCompat")
.setText("I am using ShareCompat class")
.setChooserTitle("Sending Text")
.createChooserIntent();
if (shareIntent.resolveActivity(getPackageManager()) != null)
startActivity(shareIntent);
显式和隐式意图的示例:
1)清单文件:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="tj.xona.customaction" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
2)MainActivity类:
public class MainActivity extends AppCompatActivity {
private TextView textView;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.outputText);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Intent intent = new Intent(MainActivity.this, SecondActivity.class); // Explicit intent
Intent intent = new Intent(); // Implicit intent
intent.setAction("tj.xona.customaction"); // custom action
startActivityForResult(intent, SecondActivity.CUSTOM_INTENT);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SecondActivity.CUSTOM_INTENT && resultCode == RESULT_OK) {
String msg = data.getStringExtra(SecondActivity.MESSAGE_BACK);
textView.setText(msg);
}
}
}
3)SecondActivity类:
public class SecondActivity extends AppCompatActivity {
public static final int CUSTOM_INTENT = 1;
public static final String MESSAGE_BACK = "message";
private EditText edit;
private Button send;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
edit = (EditText) findViewById(R.id.edit);
send = (Button) findViewById(R.id.send);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String msg = edit.getText().toString();
Intent intent = new Intent();
intent.putExtra(MESSAGE_BACK, msg);
setResult(RESULT_OK, intent);
finish();
}
});
}
}
结论:您可以对应用中使用intent-filter定义的Activity使用显式和隐式意图。但是,如果您想使用其他应用程序中的活动,则必须使用隐式意图。在您的应用内部,最好使用明确的意图来启动活动。使用隐式意图的想法是重复使用手机中其他应用的某些活动。当您遵循标准动作名称时,可以轻松使用某些功能,而且最有趣的是您可以有多种选择。通过对您的活动使用自定义操作,您可以限制您的应用,因为没有人知道此自定义操作,例如在此示例中:&#34; tj.xona.customaction&#34;。