我制作了一个活动,从已安装的应用中选择一个应用,并获取所选应用的启动器意图,并将该意图传递回启动活动:
Intent intent = packageManager
.getLaunchIntentForPackage(app.packageName);
if (null != intent) {
Intent data = new Intent();
data.setData(Uri.parse(intent.toString()));
setResult(RESULT_OK, data);
finish();
}
来自开始活动的onActivityResult:
public void onActivityResult(int requestCode, int resultCode, Intent data){
if (requestCode == request_Code){
if (resultCode == RESULT_OK){
intent = data.getData().toString();
startActivity(new Intent(intent));
}
我从Logcat中提取了intent
字符串和startActivity中的Intent
,我得到了这个:
intent
字符串:意图{act = android.intent.action .MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10000000 pkg = com.android.providers.downloads.ui cmp = com.android.providers.downloads.ui / .DownloadsListTab}
startActivity中的Intent
: Intent {act = Intent {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10000000 pkg = com.android.providers.downloads。 ui cmp = com.android.providers.downloads.ui / .DownloadsListTab}}
(我的应用程序因为错误的意图而崩溃)
正如您所看到的,传递给起始Activity的String是我需要的Intent(在String中)
那么无论如何我可以在不使用Intent的构造函数的情况下使String成为一个意图吗?或者也许是一种将Intent直接传递给起始活动的方法?
答案 0 :(得分:2)
我认为您正在尝试将字符串传递给其他活动,您需要将其传递给其他活动。
String messageToPass= "Hello Word!";
Intent intent = new Intent(this, toClassName.class);
intent.putExtra("message", messageToPass);
startActivity(intent);
然后在其他活动中提取,例如
Intent intent = getIntent();
String messageReceived= intent.getExtras().getString("message");
答案 1 :(得分:0)
看起来你正在制作它太复杂了#34; ......你正在尝试使用String来启动一个Activity而不是一个Intent。相反,只需传递您想要使用的Intent。例如,试试这个:
Intent intent = packageManager
.getLaunchIntentForPackage(app.packageName);
if (null != intent) {
setResult(RESULT_OK, intent);
finish();
}
然后这样做:
public void onActivityResult(int requestCode, int resultCode, Intent data){
if (requestCode == request_Code){
if (resultCode == RESULT_OK){
startActivity(data);
}
}
}