Alterando o nível da luz de fundo, iPhone
-
21-09-2019 - |
Pergunta
Eu procurei uma maneira de definir o nível de luz de fundo em um aplicativo no iPhone. Encontrei uma solução aqui:
http://www.iphonedevsdk.com/forum/29097-post3.html
O problema que tenho é que, quando adiciono isso ao meu aplicativo, recebo um erro e um aviso. Meu código é o seguinte:
#include "GraphicsServices.h"
- (void) viewWillAppear:(BOOL)animated
{
NSNumber *bl = (NSNumber*) CFPreferencesCopyAppValue(CFSTR("SBBacklightLevel" ), CFSTR("com.apple.springboard"));
previousBacklightLevel = [bl floatValue];
//Error here : incompatible types in assignment
[bl release];
GSEventSetBacklightLevel(0.5f);
// Warning here : implicit declaration of function 'GSEventSetBacklightLevel'
}
//...The rest of my app
- (void)applicationWillTerminate:(UIApplication *)TheNameOfMyAppIsHere
{
GSEventSetBacklightLevel(previousBacklightLevel);
}
Não tenho certeza do que está causando isso. Eu também não sei realmente o que precisa ser no meu arquivo .h aqui, mas eu tenho:
NSNumber *previousBacklightLevel;
Editar // alterado
NSNumber *previousBacklightLevel
para
float previousBacklightLevel;
Conforme sugerido e isso classificou os tipos incompatíveis em erro de atribuição.
Agora deixado com:
"_Gseventsetbacklightlevel", mencionado em:
-[MyAppViewController ViewWillappear:] em MyAppViewController.o
-[MyAppViewController ApplicationWilterinate] em MyAppViewController.o
Símbolo (s) não encontrado
Collect2: LD retornou 1 status de saída
Também não tenho certeza de como consertar este!
Qualquer ajuda seria apreciada,
// editar
Todos os problemas classificados. Obrigado a todos que me ajudaram. Eu realmente aprecio isso e mal posso esperar até que eu possa devolver um pouco, respondendo a algumas perguntas.
Muito Obrigado,
Stu
Solução
A razão pela qual você está recebendo um aviso é porque GSEventSetBacklightLevel()
é uma API privada não declarada em nenhum dos cabeçalhos do SDK. Se você planeja enviá -lo para a loja de aplicativos, seu aplicativo será rejeitado se você ligar. Se isso for para um dispositivo jailbroken, basta declarar a função.
void GSEventSetBacklightLevel(float level);
A razão pela qual você está recebendo o erro é porque você está tentando atribuir um flutuador (que é um escalar) a um NSNumber *
. Você provavelmente deseja alterar o nível anterior do BackLightle para ser um flutuador.
Outras dicas
Você pode adicionar a estrutura privada por Jus arrastar e soltar para o seu projeto Xcode de /Desenvolvedor/Platforms/iphoneos.platform/desenvolvedor/sdks/iphoneos4.2.sdk/System/Library/PrivateFrameworks/GraphicsServices.framework e também importar o #import "GraphicsServices.h"
Cabeçalho em seu arquivo .h