Introduction
In this article, we are targeting Lock Screen manipulation. In earlier versions, you can change the Lock Screen's image programmatically. But, in Windows Phone 8 SDK you can do it easily with a few lines of code.
Agenda
- First, we will add some essential Manifest (meta-data) data in WMAppMainifest.xml
- Add a dummy image in your Solution Explorer.
Which, we will use in our demo.
Procedure
Step 1
Windows Phone doesn't allow all the applications to play with Lock Screen settings except those apps with permission to do so.
Every Windows Phone app has a manifest file (in other words WMAappMainefest.xml) that contains the list of permissions in XML format.
So, we can do this by adding a few lines to our manifest file as in the following:
<extensions>
<Extension ExtensionName="LockScreen_Notification_IconCount" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" />
<Extension ExtensionName="LockScreen_Notification_TextField" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" />
<Extension ExtensionName="LockScreen_Background" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default"/>
</extensions>
If you can't get these, then it is genuinely fine because these lines are permissions and internally handled by Windows Phone itself.
Note: Put these lines just below the end tag token (in other words </token>).
Step 2
Design a simple page that has a button, in that event we change the Lock Screen's image.
And add this namespace to your project
using Windows.Phone.System.UserProfile;
private async void LockScreenChange(string pathOfImage,bool isAppResource)
{
try
{
var isProvider = Windows.Phone.System.UserProfile.LockScreenManager.IsProvidedByCurrentApplication;
if (!isProvider)
{
// Ask for Permission
var op=await LockScreenManager.RequestAccessAsync();
//Now, we will Grant The Permission
isProvider = op == Windows.Phone.System.UserProfile.LockScreenRequestResult.Granted;
// MessageBox.Show("Sent");
}
//If, You Got the Permission then, Change The Lock Screen
if (isProvider)
{
//var schema=isAppResource?"ms-appx:///":"ms-appdata:///Local/";
var uri = new Uri("ms-appx:///Images/1.jpg", UriKind.RelativeOrAbsolute);
//Set The Lock ScreenImage
Windows.Phone.System.UserProfile.LockScreen.SetImageUri(uri);
//get The URI of Lock screen Image
MessageBox.Show("Successfully Done");
}
else
{
MessageBox.Show("ERROR");
}
}
catch (Exception e)
{
MessageBox.Show(">> Exception : " + e.Message);
}
}
And, we call this method when we trigger the button event,
private void Button_Click(object sender, RoutedEventArgs e)
{
LockScreenChange("Images/1.jpg",true);
}
Explanation
- In the LockScreen() method we have paased two arguments, one is the path of the Image and the second is the kind of resource (AppResource or Isolated Resource).
- In the Try {} block, we try to detect the wheather the App has the Lock Screen permission or not. If yes, then it will go for the Lock Screen code, else it will ask for the permission.
- If yes, you have the permission to change the Lock Screen, then get the URI for the image resource. And it will do with a specified way what Windows Phone understands Either, ms-appx or ms-appdata will be joined before the URI of the image.
- Finally, we call the SetImage() method to set.
Output
After successful debug, you will get something like this:
And, when you click on the Change button then:
After tapping on YES, you have your own Lock Screen.
Conclusion
You have seen many apps on the Store that does the same thing. And, one of them is mine.
windowsphone
Regarding this demo, go with the solution file if you have any issues.