每个人我是android的初学者并创建我的项目Android应用程序,接收广播并相应地更改壁纸。应用程序在激活它时更改壁纸,但当我通过更改日期生成事件时应用程序崩溃并停止有人会帮我解决我的代码并告诉我它有什么问题吗? 请帮忙 这是代码:
MyDateReceiver.class
package com.example.vinay.imager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
/**
* Created by VINAY on 04-02-2018.
*/
public class MyDateReceiver extends BroadcastReceiver {
WeekService weekService;
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_DATE_CHANGED)||intent.getAction().equals(Intent.ACTION_TIME_CHANGED))
{
context.startService(intent);
System.out.println("Receiver Activated");
}
else
{
}
}
}
WeekService.class
package com.example.vinay.imager;
import android.app.Service;
import android.app.WallpaperManager;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.support.annotation.Nullable;
import java.io.IOException;
import java.util.Calendar;
public class WeekService extends Service {
private MyDateReceiver br;
public IntentFilter intentFilter;
private void dateChanger()
{
Calendar cd=Calendar.getInstance();
int day=cd.get(Calendar.DAY_OF_WEEK);
String []days=new String[]{"SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY"};
System.out.println("Today is"+days[day-1]);
final String k=days[day-1];
WallpaperManager wm=WallpaperManager.getInstance(getApplicationContext());
try {
if(k.equals("MONDAY")) {
wm.setResource(R.drawable.ab);
}
else if(k.equals("TUESDAY")) {
wm.setResource(R.drawable.dp);
}
else if(k.equals("WEDNESDAY")) {
wm.setResource(R.drawable.mm);
}
else if(k.equals("THURSDAY")) {
wm.setResource(R.drawable.nmn);
}
else if(k.equals("FRIDAY")) {
wm.setResource(R.drawable.nn);
}
else if(k.equals("SATURDAY")) {
wm.setResource(R.drawable.spr);
}
else
{
wm.setResource(R.drawable.spr2);
System.out.println("Hi"+k);
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//Registering to broadcast
br=new MyDateReceiver();
intentFilter=new IntentFilter();
intentFilter.addAction(Intent.ACTION_DATE_CHANGED);
intentFilter.addAction(Intent.ACTION_TIME_CHANGED);
intentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
intentFilter.addAction(Intent.ACTION_TIME_TICK);
this.registerReceiver(br,intentFilter);
//
dateChanger();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
stopSelf();
System.out.println("Service Stopped..");
this.unregisterReceiver(br);
System.out.println("Receiver unregistered..");
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
dateChanger();
return null;
}
}
Mainactivity.class
package com.example.vinay.imager;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Intent servIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button act = (Button) findViewById(R.id.activate);
final Button deact = (Button) findViewById(R.id.deactivate);
ImageView wlp = (ImageView) findViewById(R.id.imView);
wlp.setImageResource(R.drawable.spr);
servIntent = new Intent(getApplicationContext(), WeekService.class);
act.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(act.getText().equals("Activate"))
{
startService(servIntent);
Toast.makeText(MainActivity.this,"Imager Activated",Toast.LENGTH_LONG).show();
}
}
});
deact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(deact.getText().equals("Deactivate"))
{
System.out.println("Service Terminated..");
stopService(servIntent);
Toast.makeText(MainActivity.this,"Service Terminated..",Toast.LENGTH_LONG).show();
}
}
});
}
}
的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.vinay.imager">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".WeekService"/>
</application>
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
</manifest>
activiyt_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.vinay.imager.MainActivity">
<Button
android:id="@+id/activate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="208dp"
android:text="Activate"
app:layout_constraintBottom_toBottomOf="parent"
android:onClick="onClick" />
<Button
android:id="@+id/deactivate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Deactivate"
app:layout_editor_absoluteY="320sp"
tools:layout_editor_absoluteX="26dp"
tools:layout_editor_absoluteY="316dp"
app:layout_constraintTop_toBottomOf="@id/activate"/>
<ImageView
android:id="@+id/imView"
android:layout_width="161dp"
android:layout_height="157dp"
app:layout_constraintBottom_toTopOf="@id/activate"
android:layout_marginLeft="42sp"
android:layout_marginRight="42sp"
android:adjustViewBounds="false"
app:srcCompat="@android:drawable/gallery_thumb"
tools:layout_editor_absoluteX="112dp"
tools:layout_editor_absoluteY="44dp"
/>
</android.support.constraint.ConstraintLayout>
Logcatfile
02-10 01:50:10.558 2827-2827/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.vinay.imager, PID: 2827
java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.TIME_SET flg=0x24000010 } in com.example.vinay.imager.MyDateReceiver@5dbe656
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:1132)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=android.intent.action.TIME_SET flg=0x24000010 }
at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:1345)
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1374)
at android.app.ContextImpl.startService(ContextImpl.java:1358)
at android.content.ContextWrapper.startService(ContextWrapper.java:613)
at com.example.vinay.imager.MyDateReceiver.onReceive(MyDateReceiver.java:20)
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:1122)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
02-10 01:50:11.485 1315-2390/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
02-10 01:50:14.086 4436-4637/com.google.android.music:main E/GmsUtils: Failed to connect to Google API client: ConnectionResult{statusCode=API_UNAVAILABLE, resolution=null, message=null}
02-10 01:50:15.371 2153-4134/com.android.settings E/BluetoothAdapter: Bluetooth binder is null
02-10 01:50:15.833 2472-3299/com.google.android.gms.persistent E/NetworkScheduler: ignoring stale queue check message
02-10 01:50:15.892 1762-3275/system_process E/BluetoothAdapter: Bluetooth binder is null
02-10 01:50:15.892 1762-3275/system_process E/BatteryStatsService: no controller energy info supplied
02-10 01:50:15.894 1762-3275/system_process E/KernelCpuSpeedReader: Failed to read cpu-freq: /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state (No such file or directory)
02-10 01:50:15.894 1762-3275/system_process E/KernelUidCpuTimeReader: Failed to read uid_cputime: /proc/uid_cputime/show_uid_stat (No such file or directory)
02-10 01:50:15.895 1762-3275/system_process E/BatteryStatsService: modem info is invalid: ModemActivityInfo{ mTimestamp=0 mSleepTimeMs=0 mIdleTimeMs=0 mTxTimeMs[]=[0, 0, 0, 0, 0] mRxTimeMs=0 mEnergyUsed=0}
02-10 01:50:45.654 2472-3299/com.google.android.gms.persistent E/NetworkScheduler: ignoring stale queue check message
02-10 02:00:01.544 2882-4875/com.google.android.gms E/MS_RegisterService: Exception during register request.
bdpz: PERMISSION_DENIED: The caller does not have permission
at bdpv.c(:com.google.android.gms@11947470:3)
at mpe.a(:com.google.android.gms@11947470:89)
at com.google.android.libraries.matchstick.net.SilentRegisterIntentOperation.a(:com.google.android.gms@11947470:253)
at com.google.android.libraries.matchstick.net.SilentRegisterIntentOperation.onHandleIntent(:com.google.android.gms@11947470:342)
at com.google.android.chimera.IntentOperation.onHandleIntent(:com.google.android.gms@11947470:2)
at crr.run(:com.google.android.gms@11947470:10)
at cro.run(:com.google.android.gms@11947470:9)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
答案 0 :(得分:0)
问题在于您对正在接收的意图说了startService。这是广播的系统意图,而非开始实际服务的意图。您需要创建正确的意图来启动您的服务。
Intent intent = new Intent(this, HelloService.class);
startService(intent);
上面将启动HelloService。您需要将其更改为您自己的服务。
如果您遇到崩溃,请在将来添加一个堆栈跟踪。