【发布时间】:2014-03-10 00:15:54
【问题描述】:
我真的真的很陌生,所以不要笑得太厉害......或者说得太神秘...... 我已经搜索,实验和搜索等......我正在学习,但我也越来越困惑!
我需要遍历 sdcard 上的一个文件夹,并通过 android 意图一个一个地发送该文件夹中任何 .html 文件的每个实例,一旦每个实例都被另一个 android 应用程序成功处理/打印。 Let's Print Droid(用于网络连接打印机的出色打印应用程序)。 这个应用程序只能接受一个文件,处理该文件渲染它等然后将它发送到打印机,然后它通过意图发送回结果好坏!
我尝试了各种睡眠选项(我知道这是不好的做法!)并等待并通知(我相信更好?)但我无法让它打印比它找到的第一个文件或最后一个文件更多的内容(取决于我的代码! )
以下是我的代码的一个版本。这个版本通过“Lets Print Driod”应用程序发送它处理的第一个文件,然后通过显示我的 Toast 消息“Waiting loop number -->”继续循环。
一旦在我的循环中收到意图结果,谁能告诉我使用等待和通知的正确方法吗?
非常感谢您的帮助。
package com.my.test;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.widget.Toast;
public class MainActivity extends Activity {
String received_results_from_LPD = "YES";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
print_all_html();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public synchronized void print_all_html() throws InterruptedException {
received_results_from_LPD = "YES";
for(int x = 1; x < 6; x = x+1) {
if (received_results_from_LPD == "YES") {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setClassName("com.blackspruce.lpd","com.blackspruce.lpd.WebPrint");
i.setData( Uri.parse("file:///storage/emulated/0/Pictures/test" + x + ".html"));
Toast.makeText(getApplicationContext(), "Loop Position " + x, Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "Value of LPD " + received_results_from_LPD, Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "Printing " + "test" + x + ".html", Toast.LENGTH_SHORT).show();
received_results_from_LPD = "NO"; //reset for next time
startActivityForResult(i, 99);
//wait();
}
else Toast.makeText(getApplicationContext(), "Waiting loop number --> " + x, Toast.LENGTH_SHORT).show();
received_results_from_LPD = "NO";
Thread.sleep(1000);
}
}
@Override
protected synchronized void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (data != null && requestCode == 99 && resultCode == RESULT_OK) {
//successful
Toast.makeText(getApplicationContext(), "Sucessfull", Toast.LENGTH_SHORT).show();
received_results_from_LPD = "YES";
//notify();
}
else {
//not successful
Toast.makeText(getApplicationContext(), "oopps!!!!", Toast.LENGTH_SHORT).show();
received_results_from_LPD = "YES";
//notify();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
某种修复它... bodged它?!?不完全是我希望的,但暂时打印,直到我更好地理解 Java!
【问题讨论】:
-
好吧,你可以保留待处理文件列表,然后从 onActivityResult 发出下一个。
-
本质上,你必须把你的循环翻过来——而不是循环“驱动”程序流,你需要一个循环来决定每次程序流通过事件方法进入你的代码时要做什么.