2016-05-18 3 views
0

アプリを持っている(Google Play以外で)アプローチする方法についての質問をここで参照しました。テストのために、私はそれをダウンロードしてインストールできるかどうかを試してみたかっただけです。残念ながら、私は解析エラーを取得します。難易度アプリをインストールして更新しよう

私は非常に任意の助けをいただければ幸いです。

AsyncTaskクラスを呼び出すクラスからの抜粋:

public class downloadReceiver extends BroadcastReceiver { 

    private Context context; 
    private long localUpdate; 
    private long remoteUpdate = 20; 

    @Override 
    public void onReceive(final Context c, Intent i) { 

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       SharedPreferences preferences = c.getSharedPreferences("config", c.MODE_PRIVATE); 
       final String store = preferences.getString("store", ""); 
       final String id = preferences.getString("id", ""); 

       final long lastUpdated = preferences.getLong("updated", 0); 
       // autoUpdate app 
       appUpdater updater = new appUpdater(c); 

       try { 
        updater.execute(new URL("http://midamcorp.com/myApp.php")); 
       } catch (Exception e) {Log.e(this.getClass().toString(), " " + e.getMessage()); } 

とappUpdaterクラス:

public class appUpdater extends AsyncTask<URL, String, String> { 
    private Context c; 
public appUpdater(Context context) { 
    this.c = context; 
} 

    protected String doInBackground(URL... appUrl) { 
     String location = c.getFilesDir() + "/app.apk"; 
     try { 
      URL url = appUrl[0]; 
      URLConnection con = url.openConnection(); 
      con.connect(); 
      InputStream input = new BufferedInputStream(url.openStream()); 
      OutputStream output = new FileOutputStream(location); 
      byte[] buffer = new byte[1024]; 
      int read = 0; 

      while ((read = input.read(buffer)) != -1) { 

       output.write(buffer, 0, read); 
      } 
     output.close(); 
     input.close(); 

     } catch(Exception e){ 
       Log.e(this.getClass().toString(), " " + e.getMessage()); 
      } 
     return location; 
    } 
    @Override 
    protected void onPostExecute(String saveLocation) { 
     Intent i = new Intent(); 
     i.setAction(Intent.ACTION_VIEW); 
     Log.i("Location of app is: ", " " + saveLocation); 
     i.setDataAndType(Uri.fromFile(new File(saveLocation)), "application/vnd.android.package-archive"); 
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     c.startActivity(i); 
    } 
} 

注意してください、URLを私が持っているサーバが.apkファイルに問題があるため、ダウンロードを強制するPHPファイルにリンクされています。

+0

なぜ独自の更新メカニズムを実装していますか? Google Playストアがそれを処理します。 – t0mm13b

答えて

1

あなたの主な問題は、インストーラがinternal storagegetFilesDir())の部分にアクセスできないことです。 external storageを使用してください。

は、私はまた、あなたがアプリをインストールしようとする前に、あなたのFileOutputStreamに連続してflush()getFD().sync()、およびclose()を呼び出すことをお勧めします。