如何在子活动完成之前暂停父活动

时间:2013-07-08 10:51:16

标签: android android-intent

我想要通过Bluetooth发送一些文件。 这是我的代码

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ArrayList<Uri> uris = new ArrayList<Uri>();
        String multifile[] = {"/sdcard/file1.txt", "/sdcard/file2.txt", "/sdcard/file3.txt"};
        int len = multifile.length;
        Intent Int = new Intent();

        Int.setAction(android.content.Intent.ACTION_SEND_MULTIPLE);
        Int.setType("*/*");

        String packageName = null;
        String className = null;
        boolean found = false;
        PackageManager pm = getPackageManager();
        List appsList = pm.queryIntentActivities( Int, 0);

        ArrayList<ResolveInfo> list = (ArrayList<ResolveInfo>) pm.queryIntentActivities(Int, PackageManager.PERMISSION_GRANTED);
        for(ResolveInfo info: list) {
            packageName = info.activityInfo.packageName;

            if( packageName.equals("com.android.bluetooth")) {
                className = info.activityInfo.name;
                found = true;
                break;// found
            }
        }

        if (!found) {
            Toast.makeText(MainActivity.this, "not foud bluetooth",
                    Toast.LENGTH_SHORT).show();
            // exit
        }

        Int.setClassName(packageName, className);

        for(int i=0;i<len;i++) {
            File file=new File(multifile[i]);
            uris.add(Uri.fromFile(file));
        }

        Int.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
        startActivity(Int);
        onStop(); //stop here till all file have been sent 
        //delete all files which is to be send    
    }
}

所有三个文件都已发送,但问题是执行Mainactivity继续 在Intent Int完成之前,由于在发送文件之前删除了所有文件 请帮助如何停止执行Mainactivity,直到Int发送所有文件

3 个答案:

答案 0 :(得分:1)

如果您的“mainactivity”正在启动子项,请让它使用startActivityForResult()启动它,并让它不采取进一步操作(不删除文件),直到子结果可用并指示它完成没有错误。< / p>

如果没有这种父/子关系,则有几个选项,但一个简单的选项是让较低级别的活动广播一个上级活动收到的消息,并且仅在收到后续工作后进行后续工作

答案 1 :(得分:0)

您可以使用startActivityForResult。父活动将等待来自被调用活动的回调。

e.g。

Intent i = new Intent(this,CalledActivity.class);
startActivityForResult(i, requestCode);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("CheckStartActivity","onActivityResult and resultCode = "+resultCode);
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==1){
    Toast.makeText(this, "Pass", Toast.LENGTH_LONG).show();
}
else{
    Toast.makeText(this, "Fail", Toast.LENGTH_LONG).show();
}

答案 2 :(得分:0)

使用MainActivityChildActivity致电startActivityForResult()。因此,主要活动将等到子活动完成其过程。子活动完成后,使用setResult()表示该过程已完成的MainActivity。

onActivityResult()中收到结果,然后从MainActivity执行您想要的操作。