インテントサービスでjsonファイルをダウンロードしようとしていますが、ダウンロードが完了したら、新しいアクティビティを開始したいと思います。このアクティビティには2つのタスクがあります。-2つのオプションでalertDialogを表示します:restart/not-更新のタイムスタンプをonsharedpreferencesに保存します
しかし、私はいつもエラーがあります:
08-26 21:31:06.162: W/ActivityManager(96): Unable to start service Intent { cmp=com.hera.ontdekdelft.RESTARTACTIVITY }: not found
もちろん、私は多くの調査を行い、多くの人々がこの問題を抱えていることを知りました。私は与えられた解決策のほとんどを試したと思いますが、どれも私にはうまくいかないようです。
- マニフェストを確認しました。サービスはアクティビティではなく、アプリケーション内で宣言されています。
- 私は自分のインテントをさまざまな方法で呼んでみました:フルパス(
com.hera.ontdekdelft.RESTARTACTIVITY
など)そしてこのように:Intent restartIntent=new Intent(DownloadService.this, RestartActivity.class);
動作しない、または悪化させるだけの、さらにいくつかのこと。今何が起こっているのかというと、ポップアップがないので、次の再起動後に新しいデータが使用されます(タイムスタンプのみが保存されないため、利用可能な更新を確認する必要があります)。クラッシュはありませんが、実際には機能していません。
誰かがこの問題を知っている/私が失敗している場所を見る/解決策を持っていますか?ありがとう!
私のサービス:
> import java.io.File; import java.io.FileOutputStream; import
> java.io.IOException; import java.io.InputStream; import
> java.io.InputStreamReader; import java.net.URL;
>
> import android.app.Activity; import android.app.IntentService; import
> android.content.Intent; import android.net.Uri; import
> android.os.Environment;
>
> public class DownloadService extends IntentService {
>
> private int result = Activity.RESULT_CANCELED; public String
> strfilename="DelftVenues"; public String foldername;
>
> public DownloadService() {
> super("DownloadService"); }
>
>
> @Override protected void onHandleIntent(Intent intent) { File
> dir = new File(Environment.getExternalStorageDirectory() +
> "/testOntdekDelftMap");
> foldername = dir.toString();
>
>
>
>
> Uri data = intent.getData();
> String urlPath = intent.getStringExtra("urlpath");
> String fileName = data.getLastPathSegment();
> File output = new File(foldername,fileName);
> if (output.exists()) {
> output.delete();
> }
>
> InputStream stream = null;
> FileOutputStream fos = null;
> try {
> File filename = new File(foldername, strfilename);
> URL url = new URL(urlPath);
> stream = url.openConnection().getInputStream();
> InputStreamReader reader = new InputStreamReader(stream);
> fos = new FileOutputStream(filename);
> int next = -1;
> while ((next = reader.read()) != -1) {
> fos.write(next);
> }
> // Sucessful finished
> result = Activity.RESULT_OK;
>
> } catch (Exception e) {
> e.printStackTrace();
> } finally {
> if (stream != null) {
> try {
> stream.close();
> } catch (IOException e) {
> e.printStackTrace();
> }
> }
> if (fos != null) {
> try {
> fos.close();
> } catch (IOException e) {
> e.printStackTrace();
> }
> }
> }
>
> System.out.println("result: "+ result);
> Intent restartIntent=new Intent(DownloadService.this, RestartActivity.class);
> this.startService(restartIntent);
>
>
> } }
開始したいクラス(restartActivity)
public class RestartActivity extends Activity{
public String UPDATE_TIMESTAMP;
AlertDialog restartDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
// XXX Auto-generated method stub
super.onCreate(savedInstanceState);
restartDialog= new AlertDialog.Builder(RestartActivity.this).create();
String title, text, button1,button2;
String language = Locale.getDefault().getISO3Language();
if (language.equals("nld")){
title= "Herstarten?";
text= "De update is voltooid. Wilt u de applicatie nu opnieuw opstarten?";
button1="Ja";
button2="Nee";
}else{
title="Restart?";
text= "The application has been updated. Do you wish to restart now?";
button1="Yes";
button2="No";
}
restartDialog.setTitle(title);
restartDialog.setMessage(text);
restartDialog.setButton(button1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// restart applicatino
Intent intent = new Intent(RestartActivity.this, StartUp.class);
// Create a new Messenger for the communication back
startService(intent);
}
});
restartDialog.setButton2(button2, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
return;
}
});
restartDialog.show();
int timestampNow=(int) (System.currentTimeMillis()/1000);
setLastUpdateTimeStamp(timestampNow);
}
// timestamp opslaan
public void setLastUpdateTimeStamp(int timestamp){
SharedPreferences savedTimeStamp = getSharedPreferences(UPDATE_TIMESTAMP, MODE_PRIVATE);
SharedPreferences.Editor editor = savedTimeStamp.edit();
editor.putInt("timestamp", timestamp);
// Commit the edits!
editor.commit();
}
}
私のマニフェストの一部:
// lot more activities
<activity
android:name=".RestartActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.hera.ontdekdelft.RESTARTACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<service android:name=".DownloadService" >
</service>
</application>
</manifest>