Yükleme durumuyla ilgili bilgileri yakalamak için bir apk dosyası kurmak ve bir yayın alıcısı kurmak istiyorum.Android: BroadcastReceiver uygulama yükleme/kaldırma
bir BroadcastReceiver sınıfı hazırladık: Ana aktivitede
public class newPackageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("DEBUG"," test for application install/uninstall");
}
}
, bir uygulama için yükleme İlk olarak, yeni alıcı nesnesi kayıt daha sonra instanciate düğmesine basın. Benim OnClickListener sınıfta
public void onCreate(Bundle savedInstanceState) {
...
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
filter.addAction(Intent.ACTION_PACKAGE_DATA_CLEARED);
filter.addAction(Intent.ACTION_PACKAGE_INSTALL);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
filter.addAction(Intent.ACTION_PACKAGE_RESTARTED);
receiver = new newPackageReceiver();
registerReceiver(receiver, filter);
...
dlButton.setText(R.string.dl_button);
dlButton.setOnClickListener(new AppliDownloadOnClickListener(this));
@Override
public void onDestroy(){
unregisterReceiver(receiver);
super.onDestroy();
}
i koyun:
@Override
public void onClick(View v) {
// actually, the below process is in an asyncTask
URL url;
Intent promptInstall;
try {
url = new URL(apkurl);
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
String PATH = Environment.getExternalStorageDirectory()+ "/download/";
File file = new File(PATH);
file.mkdirs();
File outputFile = new File(file, "app.apk");
FileOutputStream fos = new FileOutputStream(outputFile);
InputStream is = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = is.read(buffer)) != -1) {
fos.write(buffer, 0, len1);
}
fos.close();
is.close();
promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/download/" + "app.apk")), "application/vnd.android.package-archive");
if (promptInstall != null) {
activity.startActivity(promptInstall);
} else {
ErrorDetails.displayToastMessage(activity,R.string.connection_error);
}
} catch (...) {
...
}
}
yukarıdaki kod (bunu daralmış) butonuna tıklandığında, yükleyici, görüntülenir ve uygulama mükemmel yüklenir ancak alıcı sınıfına ile (newPackageReceiver) asla çağrılmaz. Kayıt (registerReceiver) onCreate yönteminde yapılır ve onDestroy yönteminde unregisterReceiver çağrılır, dolayısıyla geçerli olur. Neden biliyor musun ?
Okuduğunuz için teşekkür ederiz!
Mükemmel ~ Çalışıyor! Veri şeması ve ACTION_PACKAGE_INSTALL ~ – johann
İyi çalışır hakkında bilgi için teşekkür ederiz, ama neden? – aotian16