2011-01-03 12 views
8

/sdcard/ ダウンロード/に保存されているインストーラのファイル名を取得することは可能ですか?私はアプリから、それをインストールしたAPKファイル名を取得したい。 特に非市場アプリで簡単に行う方法はありますか?Android:プログラムでインストーラのファイル名を取得するにはどうすればよいですか?

+0

「インストーラファイル名」とはどういう意味ですか? APKの名前は?はいの場合は、なぜそれを望みますか?詳細を追加してください。 –

+0

はい私はSDカードに保存されているapkの名前を取得したいと思います。私はapkファイルを作成し、それをサーバーに保存しました。誰かがそれをダウンロードしたい場合、サーバーは一意の名前を持つファイル "application00086.apk"を生成します。問題は次のとおりです。ディレクトリ/ data/app /に格納されているインストール後のこのアプリケーション固有のファイル名を取得する方法:興味深いメソッドが見つかりました:getInstallerPackageNameただし、このメソッドはインストーラパッケージ名のみを返します。インストーラファイルNAMEを取得したいのですが、マーケットに自分のアプリを配布したくないのです。 – Wolfie

+0

@Wolfie:私はあなたと同じ問題に直面していました。あなたはこれを解決しましたか?どうもありがとうございました ! – hoang8f

答えて

2

より良い方法は間違いなくマニフェストにバージョン文字列を含めることです。これは本当に唯一の信頼できる(そして専門的な)方法です。 AndroidはAPKを含むファイルの名前をどこにも保存しないので、入手できる方法はありません。

理論的には、おそらく特定のディレクトリ内のファイルの作成を見て、ファイルは拡張子.apkで作成されたすべての時間はあなたが、ファイルを開くマニフェストを抽出し、APKのパッケージ名を検索し、可能性FileObserverを使って何かを、構築できますファイル名とともにこれをいくつかの永続ストレージに格納します。次に、バージョン情報を取得する必要がある場合は、永続ストレージを調べて、必要なパッケージ名と一致するファイル名を取得することができます。

他のAPKファイルがダウンロード/インストールされたの前に、お使いのアプリがにインストールされている場合にのみ、これが有効です。これはあなた自身のアプリケーションのファイル名を見つけるのには役に立たないでしょう。

1

うーん、私はあなたがSDカードまたはダウンロードフォルダで何を意味するかわからないが、あなたはシステム/データディレクトリにAPKパスを得ることができます:

コマンドライン:

$ adb shell pm list packages | grep mk.trelloapp 
package:mk.trelloapp 
$ adb shell pm path mk.trelloapp 
package:/data/app/mk.trelloapp-1/base.apk 

またはあなたからアンドロイドアプリコード:

:(単に実行するプロセス)

 Process exec = Runtime.getRuntime().exec("pm path mk.trelloapp"); 

     exec.waitFor(); 

     InputStream inputStream = exec.getInputStream(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); 

     StringBuilder builder = new StringBuilder(); 
     String line = null; 
     while((line = br.readLine()) != null) { 
      builder.append(line); 
     } 

     String commandOutput = builder.toString(); 

コード上では、単に "/data/app/mk.trelloapp-1/base.apkパッケージ" を含むあなたの文字列を与える必要があります

パスの/ dataディレクトリを取得すると、インストール中にアンドロイドパッケージが/ dataディレクトリにコピーされるため、他のディレクトリの同じ(類似した)ファイルを検索しようとする可能性があります(削除されていないと仮定します)。

+0

これは役に立ちません。 OPは、ダウンロードしたAPKファイルの元のファイル名を取得できるようにするために、アプリケーションのバージョン番号がそのファイル名の一部としてエンコードされているためです。 '/ data'へのAPKパスはパッケージ名のみを使用するため、この情報は含まれません。 –

関連する問題