0

我正在更新公司应用程序的代码,大约有 20 个活动类都下载 PDF,然后使用以下代码显示它:

public void showPdf()
{
    File file = new File(Environment.getExternalStorageDirectory()+"/pdf/Read.pdf");
    PackageManager packageManager = getPackageManager();
    Intent testIntent = new Intent(Intent.ACTION_VIEW);
    testIntent.setType("application/pdf");
    List list = packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY);
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    Uri uri = Uri.fromFile(file);
    intent.setDataAndType(uri, "application/pdf");
    startActivity(intent);
}

代码正在运行,但是它已在所有 20 个类中复制(对我来说似乎很糟糕),我想将它放入每个活动类导入的单个类中,但是当我尝试执行此操作时,类似getPackageManager()startActivity(intent)没有更长的工作。

我该如何组织我的课程以实现这一目标?还是我以错误的方式解决这个问题。

4

2 回答 2

3

我该如何组织我的课程以实现这一目标?

第 1 步:将其设为实用程序类的静态方法。

步骤#2:Context ctxt作为参数添加到方法中。

步骤#3:对于在 上实现的getPackageManager()和之类的方法,在传入的参数上调用它们。startActivity()Contextctxt

第 4 步:用尺子敲击手腕以使用字符串连接创建文件路径,并以正确的方式进行。

步骤#5:摆脱queryIntentActivities()你不使用的代码。

public static void showPdf(Context ctxt)
{
    File file = new File(Environment.getExternalStorageDirectory(), "/pdf/Read.pdf");
    Intent intent = new Intent(Intent.ACTION_VIEW);

    intent.setDataAndType(Uri.fromFile(file), "application/pdf");
    startActivity(intent);
}

步骤#6:让当前呼叫的地方showPdf()呼叫YourUtilityClass.showPdf(this)

于 2013-08-07T16:35:35.757 回答
1
public class PDFUtlity{
    public static void showPdf(Context context)
    {
        File file = new File(Environment.getExternalStorageDirectory()+"/pdf/Read.pdf");
        PackageManager packageManager = context.getPackageManager();
        Intent testIntent = new Intent(Intent.ACTION_VIEW);
        testIntent.setType("application/pdf");
        List list = packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY);
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        Uri uri = Uri.fromFile(file);
        intent.setDataAndType(uri, "application/pdf");
        ((Activity)context).startActivity(intent);
    }
}

public class MyActivity extends Activity{
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      ///.....
      PDFUtlity.showPdf(this);
  }
}
于 2013-08-07T16:36:59.793 回答