如何使用实用程序类启动intent android

时间:2013-08-07 16:29:34

标签: java android scope android-activity

我正在更新公司应用程序的代码,大约有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)不再有效。

如何构建我的课程来实现这一目标?或者我是以错误的方式解决这个问题。

2 个答案:

答案 0 :(得分:3)

  

如何构建我的课程来实现这一目标?

步骤1:在实用程序类上使其成为静态方法。

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

步骤3:对于在getPackageManager()上实施的startActivity()Context等方法,请在传入的ctxt参数上调用它们。

步骤#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)

答案 1 :(得分: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);
  }
}