2012-04-04 1 views
2

У меня есть следующий код для запуска файла:Запуск файла с помощью ACTION_VIEW Намерения Действия

try { 
        path = fileJsonObject.getString("filePath"); 
        if (path.indexOf("/") == 0) { 
         path = path.substring(1, path.length()); 
        } 
        path = root + path; 
        final File fileToOpen = new File(path); 
        if (fileToOpen.exists()) { 
         if (fileToOpen.isFile()) { 
          Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW); 
          myIntent.setData(Uri.parse(path)); 
          final String pathToCheck = new String(path); 
          pathToCheck.toLowerCase(); 
          if (pathToCheck.endsWith(".wav") || pathToCheck.endsWith(".ogg") || pathToCheck.endsWith(".mp3") 
           || pathToCheck.endsWith(".mid") || pathToCheck.endsWith(".midi") || pathToCheck.endsWith(".amr")) { 
          myIntent.setType("audio/*"); 
         } else if (pathToCheck.endsWith(".mpg") || pathToCheck.endsWith(".mpeg") || pathToCheck.endsWith(".3gp") 
           || pathToCheck.endsWith(".mp4")) { 
          myIntent.setType("video/*"); 
         } else if (pathToCheck.endsWith(".jpg") || pathToCheck.endsWith(".jpeg") || pathToCheck.endsWith(".gif") 
           || pathToCheck.endsWith(".png") || pathToCheck.endsWith(".bmp")) { 
          myIntent.setType("image/*"); 
         } else if (pathToCheck.endsWith(".txt") || pathToCheck.endsWith(".csv") || pathToCheck.endsWith(".xml")) { 
          Log.i("txt","Text fileeeeeeeeeeeeeeeeeeeeeeeeee"); 
          myIntent.setType("text/*"); 
         } else if (pathToCheck.endsWith(".gz") || pathToCheck.endsWith(".rar") || pathToCheck.endsWith(".zip")) { 
          myIntent.setType("package/*"); 
         } else if (pathToCheck.endsWith(".apk")) { 
          myIntent.setType("application/vnd.android.package-archive"); 
         } 
          ((Activity) context).startActivityForResult(myIntent, RequestCodes.LAUNCH_FILE_CODE); 
        } else { 
         errUrl = resMsgHandler.errMsgResponse(fileJsonObject, 
         "Incorrect path provided. please give correct path of file"); 

         return errUrl; 
        } 
       } else { 
        errUrl = resMsgHandler.errMsgResponse(fileJsonObject,"Incorrect path provided. please give correct path of file"); 

        return errUrl; 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
       Log.i("err","Unable to launch file" + " " + e.getMessage()); 
       errUrl = resMsgHandler.errMsgResponse(fileJsonObject, 
       "Unable to launch file" + " " + e.getMessage()); 
       return errUrl; 
       } 


@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 
     try { 

    if (requestCode == RequestCodes.LAUNCH_FILE_CODE) { 
      if (resultCode == RESULT_CANCELED) { 
        Log.i("err","errrrrrrrrrrrrrrrrrrrrrrrrrrrrrr"); 
         String errUrl = responseMsgHandler.errMsgResponse(FileHandler.fileJsonObject, "Unable to launch file"); 
       mWebView.loadUrl(errUrl); 
       } else if (resultCode == RESULT_OK) { 
       String successUrl =   responseMsgHandler.launchfileResponse(FileHandler.fileJsonObject); 
       mWebView.loadUrl(successUrl); 
      } 

Amd результат Ctrl находится на «если (ResultCode == RESULT_CANCELED)». Итак, как успешно запустить это?

Может быть короче я делаю это:

final File fileToOpen = new File(path); 
if (fileToOpen.exists()) { 
if (fileToOpen.isFile()) { 
Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW); 
myIntent.setData(Uri.parse(path)); 

    if (pathToCheck.endsWith(".txt") || pathToCheck.endsWith(".csv") || pathToCheck.endsWith(".xml")) {  
           Log.i("txt","Text fileeeeeeeeeeeeeeeeeeeeeeeeee"); 
            myIntent.setType("text/*"); 
    startActivityForResult(myIntent, RequestCodes.LAUNCH_FILE_CODE); 

и

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 
if (requestCode == RequestCodes.LAUNCH_FILE_CODE) { 
       if (resultCode == RESULT_CANCELED) { 
       Log.i ("err","errrrrrrrrrrrrrrrrrrrrrrrrrrrrrr"); 
        String errUrl = responseMsgHandler.errMsgResponse(FileHandler.fileJsonObject, "Unable to launch file"); 
        mWebView.loadUrl(errUrl); 
      } else if (resultCode == RESULT_OK) { 
        String successUrl = responseMsgHandler.launchfileResponse(FileHandler.fileJsonObject); 
        mWebView.loadUrl(successUrl); 
       } 

Мой журнал ERR:

04-04 12:33:08.635: ERROR/AndroidRuntime(3757): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cooliris.media/com.cooliris.media.Gallery}: java.lang.NullPointerException 

    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at android.os.Handler.dispatchMessage(Handler.java:99) 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at android.os.Looper.loop(Looper.java:123) 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at java.lang.reflect.Method.invokeNative(Native Method) 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at java.lang.reflect.Method.invoke(Method.java:521) 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871) 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at dalvik.system.NativeStart.main(Native Method) 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757): Caused by: java.lang.NullPointerException 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at com.cooliris.media.Gallery.onCreate(Gallery.java:305) 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
    04-04 12:33:08.635: ERROR/AndroidRuntime(3757):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 

Благодарности
снеха

+0

вы можете объяснить свою проблему или проблему –

+0

Проблема заключается в том, когда я даю путь к файлу для запуска, скажем /mnt/sdcard/test.txt, он спрашивает меня: полное действие с использованием: текстового редактора ... и когда я его выбираю, Ничего не произошло! – Smitha

+0

вставьте свой полный журнал plz –

ответ

2

попробовать это

if (item_ext.equalsIgnoreCase(".mp3") || 
       item_ext.equalsIgnoreCase(".m4a")|| 
       item_ext.equalsIgnoreCase(".mp4")) { 

      if(mReturnIntent) { 
       returnIntentResults(file); 
      } else { 
       Intent i = new Intent(); 
       i.setAction(android.content.Intent.ACTION_VIEW); 
       i.setDataAndType(Uri.fromFile(file), "audio/*"); 
       startActivity(i); 
      } 
     } 

     /*photo file selected*/ 
     else if(item_ext.equalsIgnoreCase(".jpeg") || 
       item_ext.equalsIgnoreCase(".jpg") || 
       item_ext.equalsIgnoreCase(".png") || 
       item_ext.equalsIgnoreCase(".gif") || 
       item_ext.equalsIgnoreCase(".tiff")) { 

      if (file.exists()) { 
       if(mReturnIntent) { 
        returnIntentResults(file); 

       } else { 
        Intent picIntent = new Intent(); 
        picIntent.setAction(android.content.Intent.ACTION_VIEW); 
        picIntent.setDataAndType(Uri.fromFile(file), "image/*"); 
        startActivity(picIntent); 
       } 
      } 
     } 

     /*video file selected--add more video formats*/ 
     else if(item_ext.equalsIgnoreCase(".m4v") || 
       item_ext.equalsIgnoreCase(".3gp") || 
       item_ext.equalsIgnoreCase(".wmv") || 
       item_ext.equalsIgnoreCase(".mp4") || 
       item_ext.equalsIgnoreCase(".ogg") || 
       item_ext.equalsIgnoreCase(".wav")) { 

      if (file.exists()) { 
       if(mReturnIntent) { 
        returnIntentResults(file); 

       } else { 
        Intent movieIntent = new Intent(); 
        movieIntent.setAction(android.content.Intent.ACTION_VIEW); 
        movieIntent.setDataAndType(Uri.fromFile(file), "video/*"); 
        startActivity(movieIntent); 
       } 
      } 
     } 

     /*zip file */ 
     else if(item_ext.equalsIgnoreCase(".zip")) { 

      if(mReturnIntent) { 
       returnIntentResults(file); 

      } else { 
       AlertDialog.Builder builder = new AlertDialog.Builder(this); 
       AlertDialog alert; 
       mZippedTarget = mFileMag.getCurrentDir() + "/" + item; 
       CharSequence[] option = {"Extract here", "Extract to..."}; 

       builder.setTitle("Extract"); 
       builder.setItems(option, new DialogInterface.OnClickListener() { 

        public void onClick(DialogInterface dialog, int which) { 
         switch(which) { 
          case 0: 
           String dir = mFileMag.getCurrentDir(); 
           mHandler.unZipFile(item, dir + "/"); 
           break; 

          case 1: 
           mDetailLabel.setText("Holding " + item + 
                " to extract"); 
           mHoldingZip = true; 
           break; 
         } 
        } 
       }); 

       alert = builder.create(); 
       alert.show(); 
      } 
     } 

     /* gzip files, this will be implemented later */ 
     else if(item_ext.equalsIgnoreCase(".gzip") || 
       item_ext.equalsIgnoreCase(".gz")) { 

      if(mReturnIntent) { 
       returnIntentResults(file); 

      } else { 
       //TODO: 
      } 
     } 

     /*pdf file selected*/ 
     else if(item_ext.equalsIgnoreCase(".pdf")) { 

      if(file.exists()) { 
       if(mReturnIntent) { 
        returnIntentResults(file); 

       } else { 
        Intent pdfIntent = new Intent(); 
        pdfIntent.setAction(android.content.Intent.ACTION_VIEW); 
        pdfIntent.setDataAndType(Uri.fromFile(file), 
              "application/pdf"); 

        try { 
         startActivity(pdfIntent); 
        } catch (ActivityNotFoundException e) { 
         Toast.makeText(this, "Sorry, couldn't find a pdf viewer", 
           Toast.LENGTH_SHORT).show(); 
        } 
       } 
      } 
     } 

     /*Android application file*/ 
     else if(item_ext.equalsIgnoreCase(".apk")){ 

      if(file.exists()) { 
       if(mReturnIntent) { 
        returnIntentResults(file); 

       } else { 
        Intent apkIntent = new Intent(); 
        apkIntent.setAction(android.content.Intent.ACTION_VIEW); 
        apkIntent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); 
        startActivity(apkIntent); 
       } 
      } 
     } 

     /* HTML file */ 
     else if(item_ext.equalsIgnoreCase(".html")) { 

      if(file.exists()) { 
       if(mReturnIntent) { 
        returnIntentResults(file); 

       } else { 
        Intent htmlIntent = new Intent(); 
        htmlIntent.setAction(android.content.Intent.ACTION_VIEW); 
        htmlIntent.setDataAndType(Uri.fromFile(file), "text/html"); 

        try { 
         startActivity(htmlIntent); 
        } catch(ActivityNotFoundException e) { 
         Toast.makeText(this, "Sorry, couldn't find a HTML viewer", 
              Toast.LENGTH_SHORT).show(); 
        } 
       } 
      } 
     } 

     /* text file*/ 
     else if(item_ext.equalsIgnoreCase(".txt")) { 

      if(file.exists()) { 
       if(mReturnIntent) { 
        returnIntentResults(file); 

       } else { 
        Intent txtIntent = new Intent(); 
        txtIntent.setAction(android.content.Intent.ACTION_VIEW); 
        txtIntent.setDataAndType(Uri.fromFile(file), "text/plain"); 

        try { 
         startActivity(txtIntent); 
        } catch(ActivityNotFoundException e) { 
         txtIntent.setType("text/*"); 
         startActivity(txtIntent); 
        } 
       } 
      } 
     } 

     /* generic intent */ 
     else { 
      if(file.exists()) { 
       if(mReturnIntent) { 
        returnIntentResults(file); 

       } else { 
        Intent generic = new Intent(); 
        generic.setAction(android.content.Intent.ACTION_VIEW); 
        generic.setDataAndType(Uri.fromFile(file), "text/plain"); 

        try { 
         startActivity(generic); 
        } catch(ActivityNotFoundException e) { 
         Toast.makeText(this, "Sorry, couldn't find anything " + 
             "to open " + file.getName(), 
             Toast.LENGTH_SHORT).show(); 
        } 
       } 
      } 
     } 

ResultCode должен равняться RESULT_CANCELED, потому что единственный выход из этой деятельности нажав кнопку назад на телефоне это публикует отмененной код результата не нормально кода результата

+1

Приведенный выше код работает нормально .. но я не мог понять, в чем проблема в моем коде? – Smitha

0

Я думаю, что для этого намерение вы не приравнивая результат как

youractivity.setResult(Activity.RESULT_OK) 

в вашем случае может быть youractivity.setResult(RESULT_OK) до того startactivityforresult(intent)