2011-07-21 6 views
2

私はいくつかの誤解のために私の質問の主要な更新を行いました。通知バー - クリックすると指定された場所でファイルエクスプローラを開く方法

私は通知を受けています。その通知をクリックすると、ファイルエクスプローラアプリ(もちろんサードパーティのアプリ)が開きます。どんなにwhuchアプリがあり、ファイルエクスプローラ上のより多くがあります場合、それは「で開く」よう求めてはならない - そして、オープン/ SDカード/フォルダ(可能であれば)

私の通知はListar.class

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     Notification notification = new Notification(R.drawable.ic_menu_save, msg, System.currentTimeMillis()); 
     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, Open.class), 0); 
     notification.setLatestEventInfo(this, filename+" downloaded", "Click to open folder", contentIntent); 
     manager.notify(1, notification); 
にここですそれはここだ

と私のオープンクラスは:

public class Open extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     try{ 
     Intent intent = new Intent("org.openintents.action.PICK_FILE"); 
     startActivityForResult(intent, 1); 
    } 

    catch(Exception e) 
    { 
     Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show(); 
     Log.v("EX",e.toString()); 
    } 
    } 

} 

これは(「で開く」なし - 私は、デフォルトのアプリを選択したdidntの)OIファイルマネージャを開き、私はあなたの助けを必要とする理由/ SDカード、それだし。

+0

標準のAndroがあるかどうかわかりませんidはファイルエクスプローラを開く方法をサポートしています。言い換えれば、私はAndroidがファイルエクスプローラのアクティビティ/アプリを提供しているとは考えていません。 – rf43

+0

@DDoSAttackは正しいです、あなたのアプリケーションのためのあなた自身のファイルIOを書かなければならない、または単にファイルエクスプローラが必要な場合は、アプリケーションストアからAstroのようなサードパーティのアプリケーションをダウンロードしてください。 – Noah

+0

@sqrfv私はサードパーティ製のアプリケーションに依存していることを知っています...それが存在すれば、どのように呼び出すかを知る必要があります! – Tiago

答えて

1

通知はアクティビティを開始するように設計されています。あなたの場合、あなたはListar.classを起動しています。そのクラスは、ファイルを開く/表示するなど、必要なアクションを実行する必要があります。

http://developer.android.com/reference/android/app/PendingIntent.htmlは、作成したPendingIntentの目的を説明する必要があります。

+0

はい、わかっています主な質問は:私の場合、私は同じ活動を呼びます。私が他の活動 "オープン"を持っているとしましょう。ファイルエクスプローラを特定の場所に開くコードはどのようにしていますか? – Tiago

+0

私は、デフォルトの動作は、新しいインスタンスを開いて、そのインスタンスをバックグラウンドで実行することだと考えています。新しいインスタンスには、ファイルの場所があります。アプリが既に実行されている場合は、アプリを更新したい場合は、例をご覧ください:http://stackoverflow.com/questions/2424488/android-new-intent-starts-new-instance-with-androidlaunchmode-singletop – Noah

+0

ちょうど私が必要とするように活動を開始する方法ではなく、活動を開始する方法を示しています...更新された質問。 – Tiago

1

あなたは、特定の意図が存在するかどうかを確認したい場合は(たとえば、パッケージがインストールされている)あなたはこのような何か...

/** 
* Checks the system to see if the passed intent package exists. 
* 
* @param pIntent 
*   intent to be checked 
* @return true if the package exists 
*/ 
private final boolean checkIfPackageExists(final Intent pIntent) { 
    // Build package manager 
    final PackageManager packageManager = this.getPackageManager(); 
    final List<ResolveInfo> list = packageManager.queryIntentActivities(pIntent, PackageManager.MATCH_DEFAULT_ONLY); 

    return list.size() > 0; 
} 
+0

それはそうではありません...更新された質問をご覧ください。 – Tiago

+0

@Tiagoサードパーティのアプリを開く場合は、誰かがあなたの意図を受け取ることを確認する必要があります。それが私が投稿したコードが入ってくる場所です。 – rf43

+0

はい、それは今私がいくつかの例外を受けていたときに考えていたことです:)ありがとう! – Tiago

3
Intent toLaunch = new Intent(); 
toLaunch.setAction(android.content.Intent.ACTION_VIEW); 
toLaunch.setDataAndType(Uri.fromFile(new File("file_path")), MimeTypeMap.getSingleton().getMimeTypeFromExtension("jpeg")); // you can also change jpeg to other types 

との代わりに使用することができます。

PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, Open.class), 0); 

書き込み:

PendingIntent contentIntent = PendingIntent.getActivity(this, 0, toLaunch , 0); 
関連する問題