使用Intent启动活动时遇到问题

时间:2014-05-07 11:13:26

标签: java android class android-intent

我对如何使功能正常工作感到沮丧。 我一直在研究和浏览Intents。

起初我以为我做得对,但我错了,对我的意思有一些概述。 我制作了一个带有6个按钮的应用程序,所有这些按钮都打开了不同的应用程序。

  1. 时钟,2。日历,3。浏览器,4。信息,5。电话和6.联系人。
  2. 这是我用于启动联系人应用程序的onClick方法。

    // Contacts Launch
    Button contacts_launch = (Button) findViewById(R.id.contacts_launch); 
    contacts_launch.setOnClickListener(new View.OnClickListener() { 
    
     @Override
     public void onClick(View v) {
           Intent intent_contacts = new Intent(Intent.ACTION_MAIN);
           intent_contacts.addCategory(Intent.CATEGORY_LAUNCHER);
           startActivity(intent_contacts);
      }
    });
    

    对于我的所有按钮,onClick Intent方法都是相同的,只是根据应用程序名称更改了意图名称,就像消息是intent_message一样。

    启动应用程序时,以及点击按钮时。它提示我一个窗口,我可以选择该应用程序。每次我选择按钮时它都会运行应用程序。

    但是当我选择其他应用程序时,会启动联系人应用程序吗?并且不让我像以前一样选择它。我怎样才能解决这个问题?我很确定我使用的是intent函数错误。

    感谢您的时间。

    请再次检查代码,这是我修改后的代码,它只有一种只有一种intent方法。我添加了我最初使用的代码,它让我选择。这是具有意图和类别的那个。 (你现在可以看到的那个)

3 个答案:

答案 0 :(得分:1)

您好使用以下代码打开联系人:

 @SuppressWarnings("deprecation")
 Intent intent = new Intent(Intent.ACTION_PICK, People.CONTENT_URI);
 startActivity(intent);

答案 1 :(得分:1)

Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.setData(Uri.parse("sms:"));
sendIntent.putExtra("sms_body", urlToShare);
startActivity(sendIntent);

这是打开邮件应用程序或环聊的示例代码。你也可以为别人做这样的事。

答案 2 :(得分:1)

如果你不想一遍又一遍地选择Activity(比如使用createChooser时),试试这个:

public class Chooser extends Activity implements OnClickListener {
    private static final int NUM = 6;
    private static final CharSequence DEFAULT = "click for select the app, long click to clear it";

    private Intent[] mIntents = new Intent[NUM];
    private LinearLayout mLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mLayout = new LinearLayout(this);
        mLayout.setOrientation(LinearLayout.VERTICAL);
        for (int i = 0; i < NUM; i++) {
            Button b = new Button(this);
            b.setTag(i);
            b.setText(DEFAULT);
            b.setOnClickListener(this);
            registerForContextMenu(b);
            mLayout.addView(b);
        }
        setContentView(mLayout);
    }

    private CharSequence getName(Intent intent) {
        PackageManager mgr = getPackageManager();
        ResolveInfo info = mgr.resolveActivity(intent, 0);
        if (info != null) {
            return info.loadLabel(mgr);
        }
        return intent.getComponent().getShortClassName();
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        int itemId = (Integer) v.getTag();
        if (mIntents[itemId] != null) {
            menu.add(Menu.NONE, itemId, Menu.NONE, "Clear");
        }
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        int i = item.getItemId();
        Button b = (Button) mLayout.getChildAt(i);
        b.setText(DEFAULT);
        mIntents[i] = null;
        return super.onContextItemSelected(item);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            Button b = (Button) mLayout.getChildAt(requestCode);
            b.setText(getName(data));
            mIntents[requestCode] = data;
            startActivity(data);
        }
    }

    @Override
    public void onClick(View v) {
        int i = (Integer) v.getTag();
        if (mIntents[i] == null) {
            Intent intent = new Intent(Intent.ACTION_PICK_ACTIVITY);
            Intent filter = new Intent(Intent.ACTION_MAIN);
            filter.addCategory(Intent.CATEGORY_LAUNCHER);
            intent.putExtra(Intent.EXTRA_INTENT, filter);
            startActivityForResult(intent, i);
        } else {
            startActivity(mIntents[i]);
        }
    }
}
相关问题