Android:无法从startActivityForResult返回数字

时间:2014-08-17 01:21:14

标签: android

我正在尝试编写一个有两个按钮的应用程序 - 第一个显示联系人列表,第二个向所选联系人发送消息。我可以使用startActivityForResult和onActivityResult选择一个联系人,但我不能将联系人的号码返回到我的主代码,在那里它将被第二个按钮的onClick方法读取。当运行下面的代码时,我收到带有电话号码的Toast消息,但是当我尝试发送消息时,我收到“请先选择联系人”消息。我不知道如何在onActivityResult中创建“phoneNumber”变量,将其发送到我的主要活动中的“phoneNumber”。谢谢!

package com.example.testa;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class AndroidAlarmService extends Activity { 
    private PendingIntent pendingIntent;
    private static final int PICK_CONTACT_REQUEST = 0; 
    private static final Uri CONTACTS_CONTENT_URI = ContactsContract.Contacts.CONTENT_URI; 
    static String phoneNumber = ""; 


@Override
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final Button contacts_button = (Button) findViewById(R.id.getContacts);         
    contacts_button.setOnClickListener(new Button.OnClickListener() { 
        @Override
        public void onClick(View v) {
            try { 
                Intent intent = new Intent(Intent.ACTION_PICK, CONTACTS_CONTENT_URI); 

                intent.setType(Phone.CONTENT_TYPE);
                startActivityForResult(intent, PICK_CONTACT_REQUEST);
            } catch (Exception e) { 
                Log.e("AAS", "Found an error in contacts button");
            } 
        } 
    });
    final Button send_button = (Button) findViewById(R.id.send_button); 
    send_button.setOnClickListener(new Button.OnClickListener(){
        @Override
        public void onClick(View arg0) {

            final String yourtext = "my message";
            Intent myIntent = new Intent(AndroidAlarmService.this, MyAlarmService.class);
            if (phoneNumber == ""){
                Toast.makeText(AndroidAlarmService.this, "Please select a contact first" , Toast.LENGTH_SHORT).show();
                //This is the message I get
                return;
            }
            myIntent.putExtra("phoneNumber", phoneNumber);
            myIntent.putExtra("yourtext", yourtext);
            pendingIntent = PendingIntent.getService(AndroidAlarmService.this, 0, myIntent, 0);
        }});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (data != null) {
        Uri uri = data.getData();

        if (uri != null) {
            Cursor c = null;
            try {
                c = getContentResolver().query(uri, new String[]{ 
                            ContactsContract.CommonDataKinds.Phone.NUMBER,  
                            ContactsContract.CommonDataKinds.Phone.TYPE },
                        null, null, null);
                if (c != null && c.moveToFirst()) {
                    String number = c.getString(0);
                    int type = c.getInt(1);
                    showSelectedNumber(type, number);
                }
            } finally {
                if (c != null) {
                    c.close();
                }
            }
        }
    }
}
public void showSelectedNumber(int type, String number) {
    Toast.makeText(this, type + ": " + number, Toast.LENGTH_LONG).show();
    //this part is working
}
}

1 个答案:

答案 0 :(得分:1)

更改

String number = c.getString(0);

phoneNumber = c.getString(0);

这会将电话号码存储在成员变量中,而不是存储在本地变量中。现在,您可以在第二个按钮的单击侦听器中使用此phoneNumber成员变量。

请注意phoneNumber == ""是错误的。您应该使用equals()来比较String个实例的相等性。