3

Android 6 용 앱 위젯에서 일해 왔으며 작동 방식은 수신자가 onUpdate를 수신 할 때마다 RemoteView를 적절한 내용으로 업데이트하기 전에 권한을 확인한 다음 '권한 실종 된 "또는 그것이 무엇을 가지고있어 야지.Android 앱 위젯 권한 변경에 대한 수신기가 있습니까?

그러나 시스템에서 응용 프로그램> 권한을 통해 내 응용 프로그램에 필요한 권한을 비활성화하면 프로세스가 "죽은"것으로 표시되는 것을 알 수 있습니다.

위젯이 onUpdate를 트리거하여 에뮬레이터에서 여전히 작동하는지 테스트한다면, 더 이상 작동하지 않는 것입니다. 사용 권한을 다시 토글하면 새 프로세스 ID가 생성되고 위젯이 실행 중이며 다시 작동합니다.

이제 내 질문에, 사용 권한의 변경 사항을 캡처하는 방법이 있습니까? 이상하게 들리지만 위젯은 홈 화면에서 여전히 "살아"있습니다. Studio에 따라 "죽은"것으로 간주 될 때 사용 권한 변경으로 인해 위젯은 아무 것도 표시되지 않습니다.)/

답변

0

오른쪽, 내가 문제를 알아 냈어요 생각

을 도울 수 권한을 취소하면 응용 프로그램의 프로세스가 종료됩니다. 또는 권한을 다시 부여하자마자 동일한 프로세스 (동일한 PID)가 다시 살아 있기 때문에 실제로 어딘가에서 일시 중단 될 수 있습니다.

위젯 ID가 손실되므로 브로드 캐스트를 수신 할 때 onUpdate()가 호출되지 않고 홈 화면에 추가 된 모든 위젯을 업데이트 할 수 없습니다.

따라서 해결 방법은 무엇입니까?

appWidgetManager의 새 인스턴스를 가져 와서 super.onReceive()를 호출하기 전에 수동으로 해당 위젯 ID를 다시 Intent에 넣습니다. 그런 다음 모든 위젯 인스턴스에 다시 액세스하여 그에 따라 업데이트 할 수 있습니다. 구글은 권한이없는 이유를 모르겠어요

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

    String action = i.getAction(); 
    if (action.equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE)) { 
     ComponentName thiswidget = new ComponentName(c,  BroadcastHandler.class); 
     AppWidgetManager am = AppWidgetManager.getInstance(c); 
     int[] ids = am.getAppWidgetIds(thiswidget); 
     i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids); 

     // either handle the permission change at this point or in onUpdate() 
    } 

    super.onReceive(c,i); 

} 

은 =/

0

나는 그렇지 않습니다. 물론 당신이 찾고있는 것이 맞다면,하지만이 코드를 사용하여 권한을 확인하십시오. 권한이 거부 된 경우 다음에 앱 (내 경우에는 웨어러블 앱)을 사용할 때 다시 권한을 요청할 것입니다.

나는 여분의 클래스에서이 함수를 사용 했으므로 아마도이 함수를 수정해야한다.

int permissionCheck = ContextCompat.checkSelfPermission(mainActivity, 
       Manifest.permission.RECORD_AUDIO); 

     if (permissionCheck != 0) { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       mainActivity.requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO, 
         Manifest.permission.INTERNET}, REQUEST_RECORD_AUDIO_PERMISSION); 
      } 
     } 

뿐만 아니라 당신은 당신이 Manifest.permission와 라인 Manifest.permission.RECORD_AUDIO를 교체해야 최종 변수를

private final int REQUEST_RECORD_AUDIO_PERMISSION=1; 

를 선언해야합니다. (허락) 당신이 원하는 경우

권한을 자주 확인하려면 권한을 필요로하기 전에 메소드를 만들고 코드에서 사용하십시오. 사용자가 휴대 전화의 설정> 응용 프로그램> 응용 프로그램> 권한에 갈 때

희망 난 ... 당신이

Birki

+0

문제는이 권한이 부여 된 후 발생하는 것입니다 정직하게 리스너를 취소.전화 설정을 통해 권한을 수동으로 토글 한 경우 앱 위젯이 홈 화면에서 작동을 멈추고 프로세스가 오류없이 죽은 것으로 표시됩니다. 그게 내가 잡으려고하는 것입니다. / – Ken