2013-07-08 170 views
1

我有一些文件,我想通過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發送所有文件

回答

1

如果您的「mainactivity」正在啓動孩子,請使用startActivityForResult()啓動它,並讓孩子結果不可用(不刪除文件),直到孩子的結果可用並指示它完成而沒有錯誤。

如果沒有這種父母/子女關係,有幾個選擇,但一個簡單的方法是讓較低級別的活動廣播一條消息,即較高級別的活動接收並且僅在其進行後續的工作接收。

0

您可以使用startActivityForResult。父母活動將等待來自被叫活動的回叫。

例如

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(); 
} 
+0

但我不知道如何使用startActivityforResult與Int.setClassName(packageName,className); – JOHNCENA

+0

@JOHNCENA你現在正在用'startActivity(Int)'開始活動。取而代之,用'startActivityForResult(Int,_requestCode _);'創建一個'onActivityResult()'方法。您的_requestCode_(值是您選擇的,其他地方無關緊要)將與孩子提供的結果(使用'setResult()')一起反饋給'onActivityResult()'。 – mah

+0

但是,如何暫停父活動,因爲父活動的執行在開始活動結束後繼續,主要問題請幫助 – JOHNCENA

0

從你MainActivity呼叫ChildActivity使用startActivityForResult()。因此,主要活動將等到孩子活動完成其過程。當子活動完成時,使用setResult()來指示過程完成的MainActivity。

接收onActivityResult()的結果,然後從MainActivity做你想做的。